如何在pdo中添加变量值->;查询


How to add variable values inside pdo->query

我想升级我当前的代码,它不断地用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报告查询ORDERBY的最后一行出现错误当我将这些线路替换为"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中的第1'行:42堆栈跟踪:#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);

一切正常。

您希望使用准备好的语句查询参数,如下所示:

$sth = $dbh->prepare('SELECT your_column FROM your_table WHERE column < :parameter');
$sth->bindParam(':parameter', $your_variable, PDO::PARAM_STR);
$sth->execute();

在查询中直接使用变量不会保护您免受SQL注入的影响,即使您使用的是PDO。参数是防止它们的唯一好方法。