0

データベースから情報を取得する PHP コードがあります。以下に示すように、正常に機能する準備済みステートメントを使用します。

<?php

$n = '5';

if ($stmt = $connection->prepare("SELECT Title FROM Items WHERE ID = ?"))
{
    $stmt->bind_param("s", $n);
    $stmt->execute();
    $stmt->bind_result($title);
    while ($stmt->fetch())
    {
        echo $title;
    }
    $stmt->close();
}
?>

そして、これが「バットマン」をエコーするとしましょう。

ただし、プレースホルダーをここに移動すると:

"SELECT ? FROM Items WHERE ID = 5"

そして変更:

$n = 'Title';

「バットマン」をエコーする代わりに、「タイトル」をエコーし​​ます。プレースホルダーを SELECT パラメーターとして使用することはできませんか?

4

2 に答える 2

2

あなたがしたことはこれです:

SELECT "Title" FROM Items WHERE ID = 5

パラメータに対してのみ、識別子に対して準備済みステートメントバインディングを使用することはできません。

于 2013-08-12T19:00:00.003 に答える
0

はい、このように動作します。
任意のクエリ部分ではなく、データを想定した準備済みステートメント。

そのため、未加工の mysqli で識別子にプレースホルダーを使用することはできません。しかし、safemysqlでそれを行うことができます:

$field = $db->getOne("SELECT ?n FROM Items WHERE ID = 5", 'Title');

しかし、特定のフィールドを動的に選択する必要がある場合は、設計に問題があります。

于 2013-08-12T19:00:03.403 に答える