0

withを使用fetch_array(MYSQLI_ASSOC)しますqueryが、準備済みステートメントでは機能しません。準備されたステートメントのそれに相当するものは何ですか?

4

2 に答える 2

0

受け入れられている PDO ソリューションに加えて、mysqli 用のソリューションを次に示します。

最初に覚えておくべきことは、mysqli の準備済みステートメントは結果をバインドする必要がないということです。

バインドされた結果を使用する代わりに、mysqli_result インターフェースを介して結果を取得することもできます。mysqli_stmt_get_result() は、バッファされた結果セットを返します。

たとえば、次のようになります。

$sql = 'SELECT * FROM mytable ORDER BY column LIMIT ?,' . SOME_CONSTANT;

ステートメントをバインドして実行したら、get_result() を呼び出すことができます。

$stmt = $db->prepare($sql);
$stmt->bind_param('i', $int) || die($db->error);
$stmt->execute()             || die($db->error);
$result = $stmt->get_result();

この時点で、機能的には次のものと同等です。

if ($result = $db->query($sql)) {

そして、おなじみの fetch_array を呼び出すことができます:

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $results[] = $row;
}

準備されていない同等の結果を閉じる代わりに、ステートメントを閉じます。

$stmt->close();
于 2013-09-10T14:04:47.250 に答える