2011-05-31 120 views
2

所以我相當偏執,用mysql_real_escape_string()與PDO。我實際上並沒有在PDO中使用準備好的語句,所以我必須清理輸入。與PDO一起使用mysql_real_escape_string(沒有連接到本地主機服務器)

當我自己的服務器上託管,我想創建本地計算機上的非特權用戶這樣mysql_real_escape_string()不會失敗,我的空變量(嘿,現在消毒!)。我意識到這是一個相當失敗的解決方案,因爲如果數據庫沒有匹配的字符集,那麼根本就沒有必要進行消毒,但是它在過渡期中起作用。

現在,在我的新主機上,我無法爲數據庫創建一個未經授權的非特權用戶...並且mysql_real_escape_string()失敗,因爲本地計算機上沒有mysql服務器。我無法編輯php.ini來設置默認數據庫的主機名/用戶名/密碼。

我該怎麼辦?

頭腦風暴,因爲我正在寫這個,我想知道如果PHP允許運行時更改配置...也許... hrm。 編輯:嗯... ini_set()? :O

+0

爲什麼你不想使用預處理語句? – 2011-05-31 18:53:59

+0

主要是懶惰。我習慣將變量直接引入SQL查詢中(當然,在被清理之後)。準備它們並不會那麼困難,我已經意識到了。 – 2011-05-31 19:03:08

回答

16

像這樣混合兩個數據庫庫是一個壞主意,並且可能不安全。

mysql_real_escape_string()需要一個現有的,經典的mysql_connect()數據庫連接(它可以獲取字符集信息)是完全安全的。的PDO連接將是獨立的,可能具有不同的字符集設置,最終導致less security:使用mysql_real_escape_string()否則產生水平E_WARNING的錯誤之前

甲MySQL連接是必需的,並返回FALSE。如果未定義link_identifier,則使用最後一個MySQL連接。

一路使用PDO,沒有其他選擇。

如果你不想使用準備好的語句,PDO::quote應該是正確的功能:

返回帶引號字符串,它是理論上安全傳遞到SQL語句。

但請注意,即使是該函數的手冊頁也建議使用預處理語句。

+1

感謝您的警告。我想我應該學會在沒有PDO ::引用的情況下以「正確」的方式做到這一點,吸收它並學會準備我的陳述。乾杯,佩卡! – 2011-05-31 18:40:56

7

使用PDO的用處是不用擔心逃跑的東西。

我建議你使用準備,讓PDO做骯髒的工作。

相關問題