加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何在pdo-> query中添加变量值

发布时间:2020-12-13 13:40:36 所属栏目:PHP教程 来源:网络整理
导读:我想升级我的当前代码,这是经常用PDO注入的SQL. 目前我一直坚持在PDO查询中使用变量. 如果我有这样的两个论点 $rowsPerPage = 3; // by default we show first page $pageNum = 1; if (isset($_GET['page'])) { $pageNum = mysql_real_escape_string($_GET['
我想升级我的当前代码,这是经常用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," .
            "DATE_FORMAT(Date,'%d.%m.%Y.') as formated_date " .
            "FROM News,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();

但是发生了错误:

Fatal error: Uncaught exception ‘PDOException’ with message
‘SQLSTATE[42000]: Syntax error or access violation: 1064 You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ”-3’,‘3” at
line 1’ in /pdo/test.php:42 Stack trace: #0
/pdo/test.php(42): PDOStatement->execute() #1 {main} thrown in
/pdo/test..

第二次更新
像这样从PARAM_STR更改为PARAM_INT

$STH->bindParam(':offset',PDO::PARAM_INT);
$STH->bindParam(':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();

即使您使用的是PDO,直接在查询中使用变量也无法保护您免受SQL注入的侵害.参数是防止它们的唯一好方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读