MySQL准备声明 - ?在WHERE子句中

时间:2012-11-27 16:41:13

标签: mysql sql

这是一件非常简单的事情,但我没有给出答案:

 PREPARE stmt1 FROM 'SELECT productCode, productName

                 FROM products

                 WHERE productCode = ?';

这是什么?在末尾? '?'在SQL中不是通配符,所以它是什么......

-  编辑:谢谢!

3 个答案:

答案 0 :(得分:2)

?称为参数占位符。

  

声明可能不完整,因为数据值是   准备时未知的是问号   用作参数标记的字符。当时的声明   执行时,您提供特定的数据值,每个参数一个   在声明中。

答案 1 :(得分:0)

您使用的是诸如Doctrine之类的ORM吗? ORM通常将占位符(?)替换为值,并仅在执行之前应用它们。

答案 2 :(得分:0)

?用作预先未知的值的占位符。

假设您的语句中有两个?,那么您可以通过使用?索引为它们分配值来定义代替它们的参数(正如我们所做的那样) JAVA)

我使用Java的一个例子让你了解PreparedStatement:

我的问题是:

PreparedStatement ps = connection.prepareStatement(
                    `select * from employee where ename = ? and location = ?`);

所以我在执行查询时为enamelocation定义了要检查的值的占位符。

现在我设置值而不更改我的查询(就像在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'