1

这是一件很简单的事情,但我没能在谷歌上找到答案:

 PREPARE stmt1 FROM 'SELECT productCode, productName

                 FROM products

                 WHERE productCode = ?';

是什么 ?在最后?“?” 不是 SQL 中的通配符,所以它是什么......

——编辑:谢谢!

4

3 回答 3

2

?称为参数占位符。

该语句可能不完整,因为在准备时未知的数据值由用作参数标记的问号字符表示。在执行语句时,您需要为语句中的每个参数提供特定的数据值。

于 2012-11-27T16:41:50.710 回答
0

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

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

我用一个 Java 的例子来让你理解 PreparedStatement :

假设我的查询是:

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