in的绑定 mysql_WHERE IN子句与PDO的绑定参数?mysql

这是问题所在:

$comments = $db->prepare($query); /* where $db is the PDO object */ $comments->execute(array($post, $min, $max)); PDOStatement :: execute()的手册页说(强调我的意思):

参量

input_parameters一个值数组,其中元素的数量与要执行的SQL语句中绑定参数的数量相同。所有值均视为PDO :: PARAM_STR。

因此,您的参数将作为字符串插入,因此最终的SQL代码如下所示:

LIMIT '0', '10' 这是MySQL不会转换为数字而是触发解析错误的特殊情况:

mysql> SELECT 1 LIMIT 0, 10; +---+ | 1 | +---+ | 1 | +---+ 1 row in set (0.00 sec)

mysql> SELECT 1 LIMIT '0', '10'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1 文档怎么说:

该LIMIT子句可用于约束SELECT语句返回的行数。LIMIT接受一个或两个数字参数,这些参数都必须是非负整数常量,但以下情况除外:

在准备好的语句中,LIMIT可以使用?指定参数。占位符标记。

在存储的程序中,LIMIT可以使用整数值的例程参数或局部变量来指定参数。

您的选择包括:

一对一绑定参数,以便您可以设置类型:

$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, PDO::PARAM_INT); 不要将这些值作为参数传递:

$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max); 禁用模拟准备(MySQL驱动程序具有一个错误/功能,会使它引用数字参数):

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);来源:stack overflow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值