これはばかげた単純なことですが、答えをグーグルで検索できませんでした:
PREPARE stmt1 FROM 'SELECT productCode, productName
FROM products
WHERE productCode = ?';
とは何ですか? 最後に?'?' はSQLのワイルドカードではないので、それは何ですか...
-- 編集: ありがとうございます!
?
パラメータプレースホルダーと呼ばれます。
準備時に不明なデータ値は、パラメーターマーカーとして機能する疑問符文字で表されるため、ステートメントが完全でない場合があります。ステートメントの実行時に、ステートメントのパラメーターごとに1つずつ、特定のデータ値を指定します。
?
事前に知られていない値のプレースホルダーとして使用されます。
ステートメントに2つあると仮定すると、 (Javaで行うように)?
のインデックスを使用して値を割り当てることにより、それらの代わりにどの値がどのパラメーターになるかを定義できます。?
PreparedStatement を理解できるように、Java の例を使用しています。
私のクエリは次のとおりです。
PreparedStatement ps = connection.prepareStatement(
`select * from employee where ename = ? and location = ?`);
そのため、クエリの実行中ename
にチェックする値のプレースホルダーを定義しました。location
今、クエリを変更せずに値を設定します(Javaのように)
ps.setString(1,"John");
ps.setString(2,"New York");
したがって、実行時のクエリは次のようになります。
select * from employee where ename = 'John' and location = 'New York'
次回、値を変更したい場合は、次のようにします。
ps.setString(1,"Williams");
ps.setString(2,"London");
だから今私のクエリは次のようになります:
select * from employee where ename = 'Williams' and location = 'London'
Doctrine などの ORM を使用していますか? ORM は通常、値の代わりにプレースホルダー (?) を配置し、実行前にのみ適用します。