2013-10-17 73 views
-1

我一直在看本教程的幫助就切換到PDO:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_DevelopersPDO - 使用預處理語句

然而,有一件事我無法找到。

說我有一個名爲「用戶」

所以,文本輸入表格會爲PDO的PHP代碼如下所示:

$name = $_POST['name']; 
$stmt = $db->prepare("INSERT INTO table(name) VALUES(?)"); 
$stmt->execute(array($name)); 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 

基本上就是我要問的是,如果這是安全的。我知道PDO不同於mysql_ *,因爲您不再使用mysql_real_escape_string,但是這是我需要做的以確保沒有惡意數據將被放入數據庫?

+1

這就是爲什麼PDO的構思。 –

+1

爲你逃脫的價值 – Ibu

+0

使用pdo代替舊的mysql程序風格函數更安全。 pdo課程將爲您完成主要的字符串轉義和消毒。 –

回答

1

據我所知,SQL注入PDO幾乎是不可能的(或者至少我還沒有聽說過這樣做)。

即使你使用mysql_real_escape,那麼你冒險存在函數或few cases where the function fails中的一些微小的未知錯誤。 PDO的工作方式是,它首先「準備」,它列出了要做什麼,它是如何計算出操作和作品的。 然後它會帶入您輸入的內容。 SQL注入通過使自己的方式進入查詢

工作,簡單地說,

$query = "INSERT INTO table(name) VALUES($name)"; 

是脆弱的。即使你逃脫了它,你也可能不完全安全。

如果您準備它,它不會考慮$名稱。因此,黑客無法進入查詢。只有在它已經計算出要調用哪些操作之後,它纔會相應地放入所有內容,從而使黑客幾乎不可能以任何方式修改查詢。

+0

感謝downvote。請解釋一下吧? –

+1

閱讀[這個問題]的答案(http://stackoverflow.com/q/5741187/603003)。 'mysql_real_escape_string()'並不能真正幫你避免所有的錯誤! – ComFreek

+0

@ComFreek:我想如果你閱讀第二段,你會發現@aayush並不是說'mysql_real_escape_string'能夠爲你解決所有的錯誤。 –