pdo mysql limit_解决PHP PDO limit占位符无效

PHP PDO 方式操作 MySQL 数据库,当占位符在 limit 后时,导致选出的结果不正确。其实最后结果不是预期,是因为 limit 后面的内容在 PDO 看来认为必须是数字,所以 bindValue 或者 bindParam 必须传入类型参数 PDO::PARAM_INT。

这个坑被前人踩了无数次啦,这个问题有人说算 Bug,最近我还是踩了一次。因为我在 PHP7 和 PHP5 之间经常来回使用,导致开发环境一切换就会出一些小问题。

使用 LMLPHP 框架在写法上需要注意一点就能避免这个问题,如下示例:$this->db->select($table_name, '*', '1=1 order by id desc limit ?, ?',

[['type'=>PDO::PARAM_INT, 'value'=>0], ['type'=>PDO::PARAM_INT, 'value'=>10]]);

// or

$this->db->query("select * from $table_name order by id desc limit ?, ?",

[['type'=>PDO::PARAM_INT, 'value'=>0], ['type'=>PDO::PARAM_INT, 'value'=>10]]);

在使用 PDO 操作时,还需要注意占位符要一致性,不可以一边使用问号,一边使用名称。这样会导致 LMLPHP Notice:[2]PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters。如果参数与占位符数量对不上,则会出现报错:Invalid parameter number: number of bound variables does not match number of tokens。下面的写法就是错误的:$this->db->update($table_name, ['data' => $data], 'where id=?', [$id]);

因为在 LMLPHP 的 PDO update 方法的内部封装使用的是 named 占位符,在 where 参数中应该统一,正确的写法如下:$this->db->update($table_name, ['data' => $data], 'where id=:id', ['id'=>$id]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值