[英]how fetch currency rate and update old rates in mysql database
我疲於尋找有關如何獲取貨幣匯率並將其定期使用PHP存儲在我的數據庫中的解決方案。 我已經設法連接到數據庫,但是無法更新速率。
我有一個叫做Stock_currency的表
我也有稱為[貨幣] [Spot_Rate] [Sell_Rate] [Amont] [Buy_Rate]的列
這是我要更改為我的解決方案的PHP代碼
class CurrencyConverter {
var $xml_file = "www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
var $localhost, $root, $root, $mohamed, $stock_currency;
var $exchange_rates = array();
//Load Currency Rates
function CurrencyConverter($host,$user,$pass,$db,$tb) {
$this->localhost = $host;
$this->root = $user;
$this->root = $pass;
$this->mohamed = $db;
$this->stock_currency = $tb;
$this->checkLastUpdated();
$conn = mysql_connect($this->localhost,$this->root,$this->root);
$rs = mysql_select_db($this->mohamed,$conn);
$sql = "SELECT * FROM ".$this->stock_currency;
$rs = mysql_query($sql,$conn);
while($row = mysql_fetch_array($rs)) {
$this->exchange_rates[$row['currency']] = $row['rate'];
}
}
/* Perform the actual conversion, defaults to £1.00 GBP to USD */
function convert($amount=1,$from="GBP",$to="USD",$decimals=2) {
return(number_format(($amount/$this->exchange_rates[$from])*$this->exchange_rates[$to],$decimals));
}
/* Check to see how long since the data was last updated */
function checkLastUpdated() {
$conn = mysql_connect($this->localhost,$this->root,$this->root);
$rs = mysql_select_db($this->mohamed,$conn);
$sql = "SHOW TABLE STATUS FROM ".$this->mohamed." LIKE '".$this->stock_currency."'";
$rs = mysql_query($sql,$conn);
if(mysql_num_rows($rs) == 0 ) {
$this->createTable();
} else {
$row = mysql_fetch_array($rs);
if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) {
$this->downloadExchangeRates();
}
}
}
/* Download xml file, extract exchange rates and store values in database */
function downloadExchangeRates() {
$currency_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
$currency_file = substr($this->xml_file,strpos($this->xml_file,"/"));
$fp = @fsockopen($currency_domain, 80, $errno, $errstr, 10);
if($fp) {
$out = "GET ".$currency_file." HTTP/1.1\r\n";
$out .= "Host: ".$currency_domain."\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$buffer .= fgets($fp, 128);
}
fclose($fp);
$pattern = "{<Cube\s*currency='(\w*)'\s*rate='([\d\.]*)'/>}is";
preg_match_all($pattern,$buffer,$xml_rates);
array_shift($xml_rates);
for($i=0;$i<count($xml_rates[0]);$i++) {
$exchange_rate[$xml_rates[0][$i]] = $xml_rates[1][$i];
}
$conn = mysql_connect($this->localhost,$this->root,$this->root);
$rs = mysql_select_db($this->mohamed,$conn);
foreach($exchange_rate as $currency=>$rate) {
if((is_numeric($rate)) && ($rate != 0)) {
$sql = "SELECT * FROM ".$this->stock_currency." WHERE currency='".$currency."'";
$rs = mysql_query($sql,$conn) or die(mysql_error());
if(mysql_num_rows($rs) > 0) {
$sql = "UPDATE ".$this->stock_currency." SET rate=".$rate." WHERE currency='".$currency."'";
} else {
$sql = "INSERT INTO ".$this->stock_currency." VALUES('".$currency."',".$rate.")";
}
$rs = mysql_query($sql,$conn) or die(mysql_error());
}
}
}
}
/* Create the currency exchange table */
function createTable() {
$conn = mysql_connect($this->localhost,$this->root,$this->root);
$rs = mysql_select_db($this->mohamed,$conn);
$sql = "CREATE TABLE ".$this->stock_currency." ( currency char(3) NOT NULL default '', rate float NOT NULL default '0', PRIMARY KEY(currency) ) ENGINE=MyISAM";
$rs = mysql_query($sql,$conn) or die(mysql_error());
$sql = "INSERT INTO ".$this->stock_currency." VALUES('EUR',1)";
$rs = mysql_query($sql,$conn) or die(mysql_error());
$this->downloadExchangeRates();
}
}
?>
我已將1.00英鎊轉換為英鎊
<?php
include('CurrencyConverter');
$x = new CurrencyConverter('localhost','root','root','mohamed','Stock_Currency');
echo $x->convert(1.00,'GBP','USD');
?>
這是我收到的錯誤
( ! ) Warning: include(CurrencyConverter) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in C:\wamp\www\Currency.php on line 2
Call Stack
# Time Memory Function Location
1 0.0005 672752 {main}( ) ..\Currency.php:0
我也不明白這個錯誤信息
( ! ) Warning: include() [<a href='function.include'>function.include</a>]: Failed opening 'CurrencyConverter' for inclusion (include_path='.;C:\php\pear') in C:\wamp\www\Currency.php on line 2
Call Stack
# Time Memory Function Location
1 0.0005 672752 {main}( ) ..\Currency.php:0
這告訴我第3行有錯誤,我不理解
( ! ) Fatal error: Class 'CurrencyConverter' not found in C:\wamp\www\Currency.php on line 3
Call Stack
# Time Memory Function Location
1 0.0005 672752 {main}( ) ..\Currency.php:0
錯誤消息非常簡單: include('CurrencyConverter');
之所以失敗,是因為您的C:\\wamp\\www\\
目錄中沒有名為CurrencyConverter
文件。 您的意思是CurrencyConverter.php
嗎?
第二條錯誤消息也抱怨CurrencyConverter
不存在。 這次,它也在PHP的擴展目錄中尋找文件,但找不到該文件。
第三個錯誤是抱怨$x = new CurrencyConverter(...)
因為您從未加載過CurrencyConverter
類-我假設它在丟失的文件中。
通過包含該文件,可以糾正這三個錯誤消息。 具有CurrencyConverter
類的PHP文件在哪里? 您需要將文件名放在include
語句中,而不是類名中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.