聘我网

新概念招聘3.0

为何pdo的prepared statement不能用在order by和limit上?

vote up0vote downstar
$sql = "SELECT * FROM table ORDER BY :sort :dir LIMIT :start, :results";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(
     'sort'  => $sort, 
     'dir'  => $dir, 
     'start'  => $start,
     'results' => $results,
     )
    );
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));

上面var_dump发现没有取回结果,这是什么原因?

 

2 个答复

vote up0vote downcheck

这跟pdo没关系,而是因为DBMS本身不支持prepare对表名的处理:

mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 3;
mysql> SET @b = 4;
mysql> EXECUTE stmt1 USING @a, @b;
mysql> EXECUTE stmt1 USING @a, @b;
+------------+
| hypotenuse |
+------------+
|          5 |
+------------+

参考资料:SQL Syntax for Prepared Statements

链接
vote up0vote down

这里也有人报了同样的问题:

http://www.php.net/manual/en/pdo.prepare.php#71127

链接

您的回答





不是您要找的问题? 浏览其他含有标签 的问题或者 自己问个.