假设我有这个问题:
SELECT * FROM 'users' WHERE ( username = 'foo' OR email = 'bar' )
如何使用,该查询使用?标记而不是直接传递值。例如
SELECT * FROM 'users' WHERE ( username = ? OR email = ? ...
如果可能,请在WHERE()子句中指定输入。
编辑:我刚刚读过某个地方使用过?查询中的标记可以提高性能并有助于sql注入。这就是我在这里要做的。答案 0 :(得分:8)
在MySQL
中,您可以在查询中找到的问号符号称为参数占位符。它通常在您创建Prepare
语句( dynamic 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;