使用Bloomberg获取货币转换服务以获取实际汇率(使用美元作为基本汇率)。我可以从bloomberg获得所有费率没有问题,只是在将它们插入数据库时(对于缓存和稍后检索)它会吐出错误
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in
。
以下是我的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);
}
当我运行它时,它在每次刷新时只更新数据库中的一个项目,这意味着while在某处失败了,但我似乎无法确定在哪里。
为了解决这个问题,我搜索了Google大约20分钟,并阅读了myqli无法运行多个查询的信息。这是我通过PHP书籍教授运行查询并使用PHP和mySQL获取它们的方式。
顺便说一下这是bloomberg函数:uwe_get_file =绕过Uni代理服务的函数
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);
}
}
链接到其他阅读/解释/帮助欢迎。
答案 0 :(得分: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);