栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

MySQL上的LIMIT关键字,带有准备好的语句[重复]

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL上的LIMIT关键字,带有准备好的语句[重复]

这是问题所在:

$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);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390646.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号