Mysqlクエリを実行しているPHPプログラムにある特定のステートメントを解読しようとしています。クエリには?:と?があります 初期化。機能とは何ですか?
$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);
助けてくれてありがとう。
クリス
それらは、準備されたステートメントのプレースホルダーのように見えます。?
後で実際の値を提供する場所を提供します。PHPドキュメントの次の例を検討してください。
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
ソース: http: //php.net/manual/en/pdo.prepared-statements.php
あなたの特定の例はCS-Cartからのもののようです。たとえば、彼らのドキュメントによると、?i
そのプレースホルダーに渡された値は整数に変換されます(これはsprintf
動作方法と似ています)。
$number = 9;
echo sprintf( "I have %d tasks.", $number );
// Outputs "I have 9 tasks."
上記の場合、$number
は整数として扱われます。そのスロットに文字列を渡そうとすると、非常に異なる結果が得られます。
$number = "completed";
echo sprintf( "I have %d tasks.", $number );
// Outputs "I have 0 tasks."
ここで、私のタイプが一致しなかったため、出力で0
置き換えられたことに注意してください。completed
結論として、これらはプレースホルダーです。
文字?
は:
、パラメーター化されたクエリを形成するための識別子です。後で値を変数にバインドすると、エンジンが複数の値のクエリを実行します。クエリは、variable = valueセットごとにコンパイルするのではなく、サーバーによって1回コンパイルされるため、これはより高速に機能します。