【发布时间】:2012-04-14 12:27:55
【问题描述】:
我想升级我当前的代码,该代码是不断注入 PDO 的 sql。
目前我一直坚持在 PDO 查询中使用变量。
如果我有两个这样的论点
$rowsPerPage = 3;
// by default we show first page
$pageNum = 1;
if (isset($_GET['page'])) {
$pageNum = mysql_real_escape_string($_GET['page']);
}
$offset = ($pageNum - 1) * $rowsPerPage;
我有这样的查询
$STH = $DBH->query("SELECT News.ID, LEFT(NewsText,650), Title, AID, Date, imgID," .
"DATE_FORMAT(Date, '%d.%m.%Y.') as formated_date " .
"FROM News, Categories, NewsCheck WHERE Name LIKE '%News - Block%' AND CID=Categories.ID AND JID=News.ID ".
"ORDER BY `Date` DESC LIMIT $offset, $rowsPerPage");
PDO 在查询 ORDER BY 的最后一行报告错误
当我将这些行替换为
"ORDER BY Date DESC LIMIT3,3"); 一切正常。
那么如何在 PDO::query 中添加变量值呢?
更新: 感谢下面的回答,我已经像这样更新了我的代码
$STH = $DBH->prepare("SELECT News.ID, LEFT(NewsText,650), Title, AID, Date, imgID," .
"DATE_FORMAT(Date, '%d.%m.%Y.') as formated_date " .
"FROM News, Categories, NewsCheck WHERE Name LIKE '%News - Block%' AND CID=Categories.ID AND JID=News.ID ".
"ORDER BY `Date` DESC LIMIT :offset, :rowsPerPage;");
$STH->bindParam(':offset', $offset, PDO::PARAM_STR);
$STH->bindParam(':rowsPerPage', $rowsPerPage, PDO::PARAM_STR);
$STH->execute();
但是发生了错误:
致命错误:带有消息的未捕获异常“PDOException” 'SQLSTATE[42000]: 语法错误或访问冲突:1064 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 ''-3'、'3'' 附近使用正确的语法 /pdo/test.php:42 中的第 1 行堆栈跟踪:#0 /pdo/test.php(42): PDOStatement->execute() #1 {main} 抛出 /pdo/test..
第二次更新 像这样从 PARAM_STR 更改为 PARAM_INT
$STH->bindParam(':offset', $offset, PDO::PARAM_INT);
$STH->bindParam(':rowsPerPage', $rowsPerPage, PDO::PARAM_INT);
一切正常。
【问题讨论】:
-
将查询字符串赋值给一个变量,var_dump() 将结果贴在这里。