$stmt = $pdo->prepare("SELECT CONTENT FROM `POSTS` LIMIT ?,6");
$stmt->bindParam(1, $offset);
$stmt->debugDumpParams();
打印查询语句发现并没有引用上去,仍然是问号。改成:offset 结果也一样。。。。
1
hard2reg OP ```php
$stmt = $pdo->prepare("SELECT CONTENT FROM `POSTS` LIMIT :offset, 6"); $stmt->bindValue(":offset", intval($offset), PDO::PARAM_INT); ``` 这样也不行 |
2
DavidNineRoc 2018-04-07 20:23:37 +08:00
预处理语句不会得到正确的 SQL 的,PDO 是预处理,直接发送给 MySQL 处理
|
3
hard2reg OP @DavidNineRoc 那就会涉及到注入问题了吧
|
4
1762628386 2018-04-07 20:57:05 +08:00
|
5
hard2reg OP @1762628386 不行,我查过了,limit 是怎么搞都不行。只能硬核的直接塞 SQL 语句。如下
$sql = "SELECT CONTENT FROM `POSTS` LIMIT " . $_GET["offset"] . ", 6"; $query = $pdo->query($sql); |
6
1762628386 2018-04-07 22:14:22 +08:00
@hard2reg 刚看了下几个框架的源码 都是类似 (int) $limit 拼接的 没有用预处理 貌似很早就这这样了
|
7
DavidNineRoc 2018-04-07 23:18:49 +08:00 via Android 1
预处理是不会存在注入问题的,因为参数绑定会限制执行参数。
还有楼上说看了几个框架,说是手动拼接 SQL,这个没错,但是参数还拼接,我不信。除非现在是 2008,现在的框架肯定都是 PDO 驱动数据库层的,既然用了 PDO 肯定会用预处理的。(可能还真有这种框架 想得到正确的 SQL,自己正则匹配预处理 SQL,然后匹配参数 |
11
carlclone 2018-04-08 15:32:34 +08:00
$query = $this->_db->prepare("select count(*) from `art` where `id`= ? ");
$query->execute( $artid ); $ret = $query->fetchAll(); |