从php mysql转换为mysqli mysqli_fetch_array

时间:2013-01-07 19:37:38

标签: php mysqli

我正在将程序从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 购买清单基本上确定了从数据库中检索哪些行,运行查询并将结果分配给$ this->结果

这部分显然有效,因为我有一个有效的结果。 然后是$ templates。 'purchasing.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

任何人都可以了解实际发生的事情。

在尝试返回之前$ result的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)
}

1 个答案:

答案 0 :(得分:1)

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

mysql_fetch_array没有更多要提取的行时,FALSE会返回mysqli_fetch_arraysNULL会返回$results

所以=== FALSE永远不会else,而且你总是进入while区块并且可能会返回一些垃圾并发出警告。

因此,调用get_result()的{​​{1}}循环永远不会结束,因为它不会得到false而是我不知道