我還在學習PDO的過程中,但是當我今天晚上檢查了它是否適用於SQL注入URL參數時,我感到很驚訝,令我吃驚的是它確實有效。所以我開始思考;發佈的值應該使用PDO準備的語句自動清理,這意味着我的SQL查詢一定有問題,對嗎?爲什麼PHP PDO不能保護我的查詢不被注入?
我有一個頁面,需要一個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例外,我得到的是:
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 ''21-31282 ''' at line 1' in C:\xampp\htdocs\filmvote\include\databaseClass.php:33 Stack trace: #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} thrown in C:\xampp\htdocs\filmvote\include\databaseClass.php on line 33
您加入' or 1-1
到URL時得到這樣的錯誤的。我能做些什麼呢?非常感謝您的幫助。
這不是一份聲明 –