解决PDO-mysql中LIMIT和IN子句执行失败的问题

  1. LIMIT子句执行失败
    数据库连接用的是PDO,遇到分页的场景,
    offset.png
    在sql中的"LIMIT :offset, :pageSize"执行时model层的fetchAll()返回结果为空,原因是在model层绑定参数的时候$this-bindValue($placeHolder,$paramValue);时没有显示指定参数变量的类型,
    解决:
    在model层增加一个selectDatatype($var)函数返回绑定参数的类型用于在bindValue时显示参数类型,
    QQ截图20151213121011.png

bindValue.png
这样就可以解决这个limit子句取不到结果集的问题了。
Tips: 在bindValue的时候一致使用bindValue($placeHolder,$param,PDO::PARAM_*type*);以避免这种情况

  1. IN子句执行失败
    2.png
    像上面这样是返回空数组的,下面的有返回数据:
    1.png
    但是,上面这样的写法只返回IN子句里的第一个匹配项,无法返回IN子句里所有的符合的项,查了下说转成WHERE IN (?,?,?)然后在$in = '3,12,17';绑定为 $pdo->prepare($sql,$in);但是我的场景里还有其它绑定参数并且需要一致用 $stmt->bindValue(':placeHandel' => $value);这种格式进行绑定的,所以,就直接给IN子句直接传递变量 WHRE id IN ($idRange),在传递的时候记得要过滤变量以防止sql注入。
    Tips: In子句中传递范围的时候直接传递变量才行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

denglitong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值