解决PDO-mysql中LIMIT和IN子句执行失败的问题
2017-03-14 23:17
225 查看
LIMIT子句执行失败
数据库连接用的是PDO,遇到分页的场景,
在sql中的"LIMIT :offset, :pageSize"执行时model层的fetchAll()返回结果为空,原因是在model层绑定参数的时候$this-bindValue($placeHolder,$paramValue);时没有显示指定参数变量的类型,
解决:
在model层增加一个selectDatatype($var)函数返回绑定参数的类型用于在bindValue时显示参数类型,
这样就可以解决这个limit子句取不到结果集的问题了。
Tips: 在bindValue的时候一致使用bindValue($placeHolder,$param,PDO::PARAM_*type*);以避免这种情况
IN子句执行失败
像上面这样是返回空数组的,下面的有返回数据:
但是,上面这样的写法只返回IN子句里的第一个匹配项,无法返回IN子句里所有的符合的项,查了下说转成WHERE IN (?,?,?)然后在$in = '3,12,17';绑定为 $pdo->prepare($sql,$in);但是我的场景里还有其它绑定参数并且需要一致用 $stmt->bindValue(':placeHandel' => $value);这种格式进行绑定的,所以,就直接给IN子句直接传递变量 WHRE id IN ($idRange),在传递的时候记得要过滤变量以防止sql注入。
Tips: In子句中传递范围的时候直接传递变量才行。
数据库连接用的是PDO,遇到分页的场景,
在sql中的"LIMIT :offset, :pageSize"执行时model层的fetchAll()返回结果为空,原因是在model层绑定参数的时候$this-bindValue($placeHolder,$paramValue);时没有显示指定参数变量的类型,
解决:
在model层增加一个selectDatatype($var)函数返回绑定参数的类型用于在bindValue时显示参数类型,
这样就可以解决这个limit子句取不到结果集的问题了。
Tips: 在bindValue的时候一致使用bindValue($placeHolder,$param,PDO::PARAM_*type*);以避免这种情况
IN子句执行失败
像上面这样是返回空数组的,下面的有返回数据:
但是,上面这样的写法只返回IN子句里的第一个匹配项,无法返回IN子句里所有的符合的项,查了下说转成WHERE IN (?,?,?)然后在$in = '3,12,17';绑定为 $pdo->prepare($sql,$in);但是我的场景里还有其它绑定参数并且需要一致用 $stmt->bindValue(':placeHandel' => $value);这种格式进行绑定的,所以,就直接给IN子句直接传递变量 WHRE id IN ($idRange),在传递的时候记得要过滤变量以防止sql注入。
Tips: In子句中传递范围的时候直接传递变量才行。
相关文章推荐
- 解决mysql中limit和in不能同时使用的问题
- mysql中limit与in不能同时使用的解决方式.
- 关于sql条件语句where id in (@参数)执行报错问题(转换成数据类型 int 时失败)(
- 关于php页面最大执行时间问题(set_time_limit函数在windows下不起作用的解决)
- Mysql 卸载后,重新安装失败问题解决方法
- mysql存储过程一次连接多次调用失败的问题解决
- 关于php页面最大执行时间问题(set_time_limit函数在windows下不起作用的解决)
- 解决Linux下shell脚本文件执行失败问题
- MySql语句问题-in 与 limit
- MySQL+VBB问题:Record has changed since last read in table 'session' 的解决
- mysql执行update时出现问题解决
- Struts2中文件过大上传失败问题解决方案org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException
- WIN7上UpdateLayeredWindow执行失败,getlasterror返回307的问题解决方法
- 解决 mysql主从失败问题
- mysql kill process解决死锁问题,停用某条正在执行的语句
- linux下安装MySQL安装 、启动失败 问题解决办法
- 转帖--解决 手动编译mysql后启动失败的问题
- 关于php页面最大执行时间问题(set_time_limit函数在windows下不起作用的解决)
- 安装pdo_mysql 问题[解决阿里云使用wdlinux不支持pdo问题]
- MySql安装root用户密码设置失败问题解决