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 です 購入リストは基本的に、データベースから取得する行を決定し、クエリを実行し、結果を $this->result に割り当てます

有効な結果が得られたので、その部分は明らかに機能しています。次に $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'] コードをコメントアウトすると、すべてがうまく機能し、そのコードがコメント化されていないと、ブラウザのリクエストがタイムアウトします。このコードは、mysqli の代わりに mysql 拡張機能で動作しました。

ここで実際に何が起こっているのか、誰かが光を当てることができますか.

返そうとする前の $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は never=== FALSEであり、常にelseブロックに入り、警告が発せられたゴミを返す可能性があります。

結果として、whileループの呼び出しget_result()は終了しません。false取得する代わりにI don't know what .

于 2013-01-07T20:10:19.597 に答える