2012-11-05 460 views
3

可能重複:
Why shouldn’t I use mysql_* function in PHP?爲什麼不再推薦mysql擴展?

我期待在我的下一個PHP項目使用賈斯汀文森特的ezSQL,我注意到,它使用mysql_connect引擎蓋下。我知道不建議在PHP中使用mysql_*函數。我看見我的那名通過代碼SQL注入攻擊類似網站公平的份額如下:

<?php mysql_qyery("SELECT * FROM my_table WHERE id = " . $_GET['id']); ?> 

我知道PDO有prepared statements支持,但你不會被強迫準備語句,所以你仍然可以編寫類似不安全的查詢。

我在想,如果我正在使用類似exSQL的庫來執行查詢之前處理轉義數據,我應該知道是否存在mysql_*函數的內在安全缺陷?

編輯:我不是問我是否應該使用PDO/mysqli而不是mysql擴展名,或者在將來的PHP版本中是否刪除mysql擴展名。這兩個問題的答案都可以在PHP手冊以及其他地方獲得。然而,缺少易於使用的文檔,爲什麼不支持mysql擴展。這一點很明顯,因爲PHP手冊對問題"Why is the MySQL extension (ext/mysql) that I've been using for over 10 years discouraged from use? Is it deprecated? What do I use instead? How can I migrate?"的回答實際上並沒有解釋爲什麼它不受歡迎。

這對於使用仍依賴舊的mysql擴展的庫的開發人員來說是個問題。僅僅因爲擴展不再被支持,這並不是一個「無關緊要」的問題,因爲仍然有大量的庫使用舊的擴展。

+5

已經有很多地方可以得到這個問題的答案 – George

+2

根據現行標準,你的問題並不具有建設性,簡短的回答是,因爲'mysql _()'不再被社區維護,讀大紅色框http://php.net/manual/en/book.mysql.php –

+0

除了缺少準備好的語句之外,沒有其他內在安全缺陷。正如你所提到的,在PDO中編寫不安全的查詢是完全可能的......而且很多人都這樣做,相信他們並不安全,因爲嘿,他們使用的是PDO,對吧?也就是說,mysql_ *正在被淘汰,不應該再用於新項目。 –

回答