【发布时间】:2011-11-23 20:28:36
【问题描述】:
我仍在全面学习 PDO,但是当我今晚检查 SQL 注入 URL 参数是否有效时,我有点惊讶,令我惊讶的是,它确实有效。于是我开始思考;发布的值应该使用 PDO 自动清理 - 准备好的语句,这意味着我的 SQL 查询一定有问题,对吗?
我的页面需要一个 GET 变量,以便使用该 ID 从我的数据库中收集相应的数据。我创建了一个函数,其中包括准备查询以及执行它以简化编码过程。我现在写的代码是这样的:
$request = $_GET['movie'];
$sql = "SELECT * FROM `movies` WHERE `url` = '$request'";
$db = new database;
$db->setDBC();
$process = $db->executeQuery($sql);
$cmd = $process->fetch(PDO::FETCH_NUM);
$title = $cmd[1];
我得到的 PDO 异常是:
致命错误:未捕获的异常 'PDOException' 带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 C:\xampp\htdocs\filmvote\include\databaseClass.php:33 中的 ''21-31282 ''' at line 1' 附近使用正确的语法 堆栈跟踪:# 0 C:\xampp\htdocs\filmvote\include\databaseClass.php(33): PDOStatement->execute() #1 C:\xampp\htdocs\filmvote\recension.php(9): databaseManagement->executeQuery('SELECT * FROM `...') #2 {main} 在第 33 行的 C:\xampp\htdocs\filmvote\include\databaseClass.php 中抛出
将' or 1-1 添加到 URL 时会出现这种错误。我能做些什么呢?真的很感谢帮助。
【问题讨论】:
-
这不是准备好的语句
标签: php sql pdo sql-injection prepared-statement