1

これはばかげた単純なことですが、答えをグーグルで検索できませんでした:

 PREPARE stmt1 FROM 'SELECT productCode, productName

                 FROM products

                 WHERE productCode = ?';

とは何ですか? 最後に?'?' はSQLのワイルドカードではないので、それは何ですか...

-- 編集: ありがとうございます!

4

3 に答える 3

2

?パラメータプレースホルダーと呼ばれます。

準備時に不明なデータ値は、パラメーターマーカーとして機能する疑問符文字で表されるため、ステートメントが完全でない場合があります。ステートメントの実行時に、ステートメントのパラメーターごとに1つずつ、特定のデータ値を指定します。

于 2012-11-27T16:41:50.710 に答える
0

?事前に知られていない値のプレースホルダーとして使用されます。

ステートメントに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'

于 2012-11-27T16:55:15.657 に答える
0

Doctrine などの ORM を使用していますか? ORM は通常、値の代わりにプレースホルダー (?) を配置し、実行前にのみ適用します。

于 2012-11-27T16:44:27.403 に答える