使用mysqli运行多个查询

时间:2010-11-23 16:26:28

标签: php sql mysql

使用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);
}
}

链接到其他阅读/解释/帮助欢迎。

1 个答案:

答案 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);