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 回答