0

次のクエリがあるとします。

SELECT * FROM 'users' WHERE ( username = 'foo' OR email = 'bar' )

そのクエリが使用するようにするにはどうすればよいですか? 値を直接渡す代わりにマークを付けます。例えば。

SELECT * FROM 'users' WHERE ( username = ? OR email = ? ... 

可能であれば、WHERE () 句内で入力を指定します。

編集:私はどこかで読んだことがあります。クエリのマークはパフォーマンスを向上させ、SQL インジェクションに役立ちます。これが私がここでやろうとしていることです。

4

1 に答える 1

8

ではMySQL、クエリに含まれる疑問符記号をパラメータ プレースホルダと呼びます。Prepareこれは通常、ステートメント (動的 sql )を作成するときに使用されます。元、

SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @s;
SET @a = 6;
SET @b = 8;
EXECUTE stmt2 USING @a, @b;

更新 1

上記のデータに基づく選択の例を次に示します。

SET @s = 'SELECT * FROM tableName WHERE username = ? and email = ?';
PREPARE stmt2 FROM @s;
SET @a = 'foo';
SET @b = 'bar';
EXECUTE stmt2 USING @a, @b;
于 2013-02-18T00:46:08.953 に答える