![MySQL上的LIMIT关键字,带有准备好的语句[重复],第1张 MySQL上的LIMIT关键字,带有准备好的语句[重复],第1张](/aiimages/MySQL%E4%B8%8A%E7%9A%84LIMIT%E5%85%B3%E9%94%AE%E5%AD%97%EF%BC%8C%E5%B8%A6%E6%9C%89%E5%87%86%E5%A4%87%E5%A5%BD%E7%9A%84%E8%AF%AD%E5%8F%A5%5B%E9%87%8D%E5%A4%8D%5D.png)
这是问题所在:
$comments = $db->prepare($query); $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, dateFROM commentWHERe post = ?ORDER BY date DESCLIMIT %d, %d', $min, $max);禁用模拟准备(MySQL驱动程序具有一个错误/功能,会使它引用数字参数):
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)