2013-06-12 653 views
-2

我知道應該使用PDO準備語句來避免SQL注入。它必須始終有這種格式:PDO準備語句

$stmt = $db->prepare('SELECT * FROM table where id = :id'); 
$stmt->execute(array(':id' => $_GET['id'])); 

或將以下任何格式否定SQL注入?

VERSION 1

$queryString = "SELECT * FROM table WHERE id = ".$_GET['id']; 
$stmt= $db->prepare($queryString); 
$stmt->execute(); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); 

VERSION 2

$stmt = $db->query("SELECT * FROM table WHERE id = ".$_GET['id']); 
$row = $stmt->fetchAll(PDO::FETCH_ASSOC); 
+1

通過在字符串中插入id,您有點否定以PDO的方式添加參數的要點。這兩個例子可能會工作 - 你可以更容易地測試這個 - 但是第一個是真正唯一一個可以防止注入的地方 –

+0

這個代碼可以工作嗎?你試過了嗎? – Jessica

+2

綁定參數用於避免sql注入未準備語句 – Musa

回答

1

你有一個像你在你的第一個代碼做綁定的變量。 Version 1Version 2代碼都是INSECURE