2010-11-23 91 views
2

使用彭博獲取貨幣的實時匯率(使用美元作爲基礎匯率)來處理貨幣兌換服務。我可以從bloomberg獲得所有費率,只要將它們插入到數據庫(用於緩存和稍後檢索)時,它就會發現錯誤 Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in使用mysqli運行多個查詢

這是我的PHP的特定部分:

//Select all the currency codes where the rate has not been set 
$q = "SELECT currency_code FROM `currency` WHERE rate = 0"; 
//Run the query 
$r = mysqli_query($dbc,$q); 

//If the query was successful.. 
if($r){ 

//Fetch the results from the query 
while($row = mysqli_fetch_array($r, MYSQLI_ASSOC)){ 

    //Set $curr to the currency code 
    $curr = $row['currency_code']; 
    //Set $rate to a currency_code from the previous query, and put it in the bloomberg function 
    $rate = bloomberg($curr); 

    //Update the currency table with the vars just set 
    $q = "UPDATE currency SET rate='$rate' WHERE currency_code='$curr'"; 
    //Run the query 
    $r = mysqli_query($dbc, $q); 

} 

當我運行它,它在每次刷新,這意味着同時在某處失敗更新數據庫只有一個項目,但我不能似乎查明在哪裏。

爲了解決這個問題,我搜索了Google二十分鐘,並閱讀了關於myqli無法運行多個查詢。這是我通過PHP書籍教授的方式運行查詢並使用PHP和MySQL獲取它們的方式。

這裏順便彭博功能:uwe_get_file =功能來解決統一的代理服務

function bloomberg($to){ 
$cur = $to; 
$file = uwe_get_file('http://www.bloomberg.com/personal-finance/calculators/currency-converter/'); 
if(preg_match ("/price\['$cur:\S*\s=\s(\S*);/",$file,$out)){ 
return number_format($out[1], 4); 
} 
} 

鏈接到另外的讀/解釋/幫助歡迎。

回答

2

你用一個UPDATE語句的結果覆蓋$r

$q = "UPDATE currency SET rate='$rate' WHERE currency_code='$curr'"; 
$r = mysqli_query($dbc, $q); 

mysqli_query('UPDATE...')不會返回mysqli_result對象。因此,在while的第二遍中,$r已更改爲布爾值。將其更改爲一個不同的變量名進行修復:

$q = "UPDATE currency SET rate='$rate' WHERE currency_code='$curr'"; 
$u = mysqli_query($dbc, $q); 
+0

非常感謝你,沒有注意到這一點,因爲我已經在其他項目中這樣做過,而且它工作得很好,投了答案,如投票最好的,謝謝你的時間。 – Daniel 2010-11-23 16:35:09