2

準備されたmysqlステートメントを使用するようにサイトを変換しようとしていますが、の使用を置き換えるのに問題がありfetch_array()ます。

php.netのコメントは、うまくいくはずだと思っていた解決策を提供しますが、何らかの理由で、関数を呼び出すときに奇妙な未定義の定数エラーが発生しcall_user_func_array()ます。誰かがそれを行うためのより良い方法を提案できますか?

これが私が現在使用している関数です。ここに投稿するために少しおろそかにしました(mysqliを拡張し、エラーキャッチなどを処理するより大きなクラスの一部です)ので、コピーして貼り付けるのを間違えた場合は申し訳ありません。

public static function stmt_bind_assoc(&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

    $fields[0] = $stmt;
    $count = 1;

    while($field = mysqli_fetch_field($data)) {
        $fields[$count] = &$out[$field->name];
        $count++;
    }
    call_user_func_array(mysqli_stmt_bind_result, $fields);
}
public function fetch_array($rawQuery) {
    $stmt = $this->prepare($rawQuery);
    $row = array();
    self::stmt_bind_assoc($stmt, $row);
    $result = $stmt->fetch();
    $stmt->free();
    return $result;
}

私が得るエラーは次のとおりです。

注意:未定義の定数mysqli_stmt_bind_resultの使用-想定される'mysqli_stmt_bind_result'

致命的なエラー:未定義のメソッドmysqli_stmt :: free()の呼び出し

4

2 に答える 2

2

最初のエラーはcall_user_func_arrayステートメントから発生します。引用符で囲む必要があります。引用符がmysqli_stmt_bind_resultない場合、PHPはそれが定数であると見なします。

そして、にはfree()関数がありません。代わりmysqli_stmtに使用してください。$stmt->free_result()

于 2010-02-22T10:26:35.877 に答える
-1
 $servername = "localhost"; $username = "root"; $password = ""; $dbnam = "test";

 // Create connection $conn = mysqli_connect($servername, $username, $password, $dbname);

// Check connection if (mysqli_connect_errno()) {
 die("Connection failed: %s\n" . mysqli_connect_errno()); }

$stmt = mysqli_prepare($conn, "SELECT * FROM myguests") or
die(mysqli_error($conn));   mysqli_stmt_execute($stmt);

$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();

 $fields[0] = &$stmt;
 $count = 1;

 while($field = mysqli_fetch_field($data)) {
     $fields[$count] = &$out[$field->name];
     $count++;
 }

 call_user_func_array("mysqli_stmt_bind_result", $fields);
 while(mysqli_stmt_fetch($stmt))    print_r($out);

$stmt->close(); $conn->close();

私にうまく機能します、それが役立つことを願っています

于 2015-04-06T05:51:47.967 に答える