2011-10-27 32 views
0

我使用的是標準的mysql_real_escape_string();並且被告知這是安全的,但也被告知,PDO讓所以使用這種下面的腳本更好的安全性:使PDO語句正常工作

代碼:

<?php 
    $db = new PDO('mysql:host=hostname;dbname=defaultDbName', 
      'username', 'password', 
      array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); 

    $query = 'SELECT * FROM my_table WHERE title = :title'; 

    $stmt = $db->prepare($query); 
    $stmt->bindValue(':title', $myTitle); 
    $stmt->execute(); 

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
    // ... 
    } 
    ?> 

我的問題:

我是否必須使用$ db而不是僅僅使用include(「config.php」);我可以使用標準格式的配置文件嗎?

如何使用上面的查詢回顯行?我只是簡單地爲$ something = $ row ['title'];在這段時間內{}?

而且,我是這樣做的嗎?

+1

你知道,沒有什麼是安全的。只有知識會使你的代碼安全,而不是你正在使用的功能。 –

+0

大聲笑現在你讓我困惑。我對那些告訴我PDO更安全的人說了同樣的話。但他們發表聲明說,還有其他的東西,mysql_real_escape_string();無法捕獲,並且該PDO自動執行... – AAA

+1

自動?你剛剛改變了'mysql_real_escape_string();'到'$ stmt-> bindValue'。就這樣。 –

回答

0

無論您使用PDO還是其他任何使用SQL中的佔位符的API(如:title)都可以避免任何數量的SQL注入攻擊。

而且$ row {'columnname']或$ row [1]會檢索每列的值。

+1

任何數字?如果我必須根據用戶輸入對錶格進行排序,該怎麼辦? –

+0

它所保護的是SQL注入。想一想,如果一個壞人在名稱欄中輸入這個名字會發生什麼事情: - > xxxxx';從客戶刪除; < - –

+0

謹慎嘗試,如果它曾經工作? –