2

準備済みステートメントを使用して php スクリプトを作成し、データベース内のテーブルをクエリして、結果を json 形式で返したいと考えています。医師のテーブルがあり、特定の専門分野の医師を返したいです。正常に動作する準備済みステートメントを使用しないバージョンのスクリプトがあります。しかし、準備済みステートメントを使用すると、スクリプトが機能しません。

非準備文バージョン:

<?php
// include database constants
require_once("../config/config.php");             

// create db connection
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$mysqli->set_charset("utf8");

$speciality = $_POST['speciality'];

$query = "SELECT * FROM `doctors` WHERE speciality='$speciality'";
$result = $mysqli->query($query) or die("Error executing the query");
while($row = $result->fetch_assoc()) {
    $output[]= $row;    
}
print(json_encode($output));

$mysqli->close();
?>

準備済みステートメントのバージョン:

<?php
// include database constants
require_once("../config/config.php");             

// create db connection
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

$mysqli->set_charset("utf8");

$speciality = $_POST['speciality'];

$query = "SELECT * FROM `doctors` WHERE speciality=?";
if ($stmt = $mysqli -> prepare($query)){
    $stmt -> bind_param("s", $speciality);
    $stmt -> execute();
    $result = $stmt -> get_result();

    while($row = $result -> fetch_assoc()) {
        $output[]= $row;    
    }

    print(json_encode($output));
    $stmt -> close();

} else {
    echo $mysqli->error;
    echo "no entry found";
}

$mysqli->close();
?>

私は何を間違っていますか?問題がクエリの実行後にあることを意味する mysqli エラーは発生しませんが、それが何であるかはわかりません。

編集:それがうまくいかないということは、何も返ってこないということです。実行後のページの html ボディは完全に空です。一方、投稿した他のスクリプトを使用すると(準備済みステートメントなしで)、期待される結果が得られます。

4

4 に答える 4

8

更新しました:

これを使って:

/* bind result variables */
$stmt->bind_result($col1,$col2,$col3,$col4);

/* fetch values */
while ($stmt->fetch()) {
    $output[]=array($col1,$col2,$col3,$col4);
}

その代わり。それが役に立てば幸い。

誰もが反対票を投じる理由を教えてください。

于 2013-10-30T17:58:54.833 に答える
0

PHP のバージョンがメソッドと互換性があることを確認してください

http://php.net/manual/pt_BR/mysqli-stmt.get-result.php

于 2013-10-30T17:45:18.740 に答える