您的位置:首页 > 数据库 > MySQL

解决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子句中传递范围的时候直接传递变量才行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php