2

我正在将程序从 mysql 库转换为 mysqli。

编辑:更多上下文

我有以下代码调用一个类

case "purchasing";
    $tab = 'purchasing';
    require $classes . 'purchasing.php';
    $purchases = new Purchase_list($search_term, $scope);
    require $templates . 'header.php';
    require $templates . 'purchasing.php';
    break;

下面包含 get_result 的类是 Purchase_list Purchase list 基本上确定要从数据库中检索哪些行,运行查询并将结果分配给 $this->result

这部分显然是有效的,因为我有一个有效的结果。然后 $templates 。'采购.php'; 显示这些结果。

出于故障排除的目的,purchase.php 仅包含

while ($row = $purchases->get_result()) {

}

我在一个看起来像这样的类中有一个函数

function get_result() {

    $results = mysqli_fetch_array($this->result);        
    if($results === FALSE) {
        return false;
    }else {
        $results['OPENAMT'] = ($results['Puramt'] - $results['Recamt']);

        return $results;
    }


}

如果我注释掉 $results['OPENAMT'] 代码,一切正常,没有注释该代码会导致浏览器请求超时。此代码使用 mysql 扩展而不是 mysqli

任何人都可以阐明这里实际发生的事情。

$results 上的 var_dump 在尝试返回之前给出

array(11) {
  [0]=> string(5) "23074"
  ["Purno"]=> string(5) "23074"
  [1]=> string(3) "AEC"
  ["Vendno"]=> string(3) "AEC"
  [2]=> string(10) "11/28/2012"
  ["Purdate"]=> string(10) "11/28/2012"
  [3]=> string(4) "0.00"
  ["Puramt"]=> string(4) "0.00"
  [4]=> string(4) "0.00" 
  ["Recamt"]=> string(4) "0.00"
  ["OPENAMT"]=> float(0)
}
4

1 回答 1

1

我不完全知道你为什么会遇到这个问题,但我希望这可能会有所帮助。

而当没有更多行要获取时mysql_fetch_array返回,则返回.FALSEmysqli_fetch_arraysNULL

$results从来没有,=== FALSE而且您总是会进入else街区,并且可能会返回一些垃圾并发出警告。

结果,while循环调用get_result()永远不会结束,因为我没有得到false它,而是我不知道是什么

于 2013-01-07T20:10:19.597 回答