2011-11-27 30 views
0

我目前使用PHP標準庫函數工作,爲淨化功能的mysql_query字符串輸入(不只是的stripslashes和mysql_client_encoding但檢查整個查詢的一致性,包括驗證一些重要的字段值,並檢查了一些表的訪問限制)PHP數據庫訪問工具包消毒

我已經告訴任何我的項目,面臨這樣的問題時,不管多麼小的使用發展框架/擴展庫就像CakePHP的或梨可以讓我的生活更輕鬆。

從我的角度來看,在做簡單的小項目時,任何添加到標準庫中的東西都可能會很棘手,通常不值得付出努力,但我真的很渴望探索從頭開始編寫所有代碼的替代方案在那裏。

在何處或用什麼啓動任何建議?

回答

1

PHP的PDO處理與準備好的查詢所有衛生。它已經爲您編寫並默認包含在PHP> = 5.1中。另外,它兼容一大堆數據庫引擎(MySQL,MsSQL,Oracle,PostgreSQL,SQLite等),並增加了對事務的支持。

//Works for 
$id = 23; 
$id = 'harmless string'; 
$id = '0 OR WHERE 1 = 1 --'; 

$pdo = new PDO('mysql:host=localhost', $username, $password); 
$stmt = $pdo->prepare('SELECT title, body FROM posts WHERE id = :id'); 
$stmt->execute(array(
    ':id' => $id // Automatically handles sanitizing 
)); 
$results = $stmt->fetchAll(); 
+0

驚人的答案,驚人的速度,我很驚訝,我hvent瞭解PDO手冊中爲前,啞我! – NotGaeL

+1

@elcodedocle現在您已經知道了,您的任務是通過SO傳播PDO的知識。懲罰任何誰仍然使用'mysql_ *'家庭的功能:) –

1

如果你不這樣做已經在最低限度,可以考慮使用的database extensionsPDO而不是mysql_query()和所有之一。如果你正確地使用它們,它們有一些非常好的功能,例如查詢消毒來阻止SQL注入,而不必記得運行mysql_real_escape_string()

+0

非常感謝您的快速回答,你是對的,我應該開始這個工作的時候了! – NotGaeL