3

プリペアドステートメントを使用してMySQLクエリを実行する次のコードがあります。

$selectStatement = "SELECT " . implode(", ", $allFields); // cat select w/ allFields
$stmnt = $mysqli->prepare($selectStatement . 
     "FROM Musicians WHERE name = ?");
$stmnt->bind_param('s', $name);
$stmnt.execute();

この時点で、私が読んだ内容のほとんどは、$stmntを使用する必要があることを示していbind_result()ますfetch()。ただし、ダンプされた変数の束を反復処理するのではなく、値で満たされた配列を取得することをお勧めしfetch()ます。fetch_assoc()プリペアドステートメントと結果を使用している ときに得られるものと同様のものを取得する方法はありますか?

4

2 に答える 2

3

確かに、mysqliで使い慣れたfetch()を使用するには、最初にget_result()を呼び出す必要があり、常に使用できるとは限りません。
言うまでもなく、高度なコードがないと、可変数のプレースホルダーをバインドすることはできません。
これにより、mysqliプリペアドステートメントでは完全に使用できなくなります。

したがって、2つの解決策があります。

  1. mysqliを使用しないでください
  2. プリペアドステートメントは使用しないでください。

最初のオプションについては、PDOを選択してください。
mysqliとは異なり、mysqliなどから必要なものがすべて揃っています

$stm = $pdo->prepare("SELECT * FROM Musicians WHERE name = ?");
$stm->execute(array($name));
$row = $stm->fetch(); // or fetchAll() depends on the numer of rows expected.

2つ目は、手動で処理されるプレースホルダーを使用できます。
このアプローチは、実際のきちんとしたコードであるPDOよりもさらに便利です。

$row = $db->getRow("SELECT * FROM Musicians WHERE name = ?s",$name);
于 2013-03-04T08:27:04.013 に答える
0

明確にするためのソリューションを追加するには:

起動時にサーバーを選択できる場合は、PHPにphp-mysqlモジュールではなくphp-mysqlndモジュールを使用することをお勧めします。次に、次を使用できます。

...
$stmnt.execute();
$res = $stmnt->get_result();
$row = $res->fetch_assoc();

それは私には簡単に思えます。

于 2014-04-04T10:32:58.950 に答える