1

Mysqlクエリを実行しているPHPプログラムにある特定のステートメントを解読しようとしています。クエリには?:と?があります 初期化。機能とは何ですか?

$data = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = 'A'", $order_id);

助けてくれてありがとう。

クリス

4

2 に答える 2

1

それらは、準備されたステートメントのプレースホルダーのように見えます。?後で実際の値を提供する場所を提供します。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

結論として、これらはプレースホルダーです。

于 2012-10-23T19:07:21.997 に答える
0

文字?:、パラメーター化されたクエリを形成するための識別子です。後で値を変数にバインドすると、エンジンが複数の値のクエリを実行します。クエリは、variable = valueセットごとにコンパイルするのではなく、サーバーによって1回コンパイルされるため、これはより高速に機能します。

于 2012-10-23T19:12:47.713 に答える