我正在運行php 5.2.13,我有一個包含大量文件的應用程序,但它們都在開始時調用一個文件,我想在該文件中放一些行來自動執行mysql實際轉義任何查詢,因爲我不不想跨越每個文件並更改代碼。如何啓用自動mysql真正轉義到所有查詢?
謝謝!
我正在運行php 5.2.13,我有一個包含大量文件的應用程序,但它們都在開始時調用一個文件,我想在該文件中放一些行來自動執行mysql實際轉義任何查詢,因爲我不不想跨越每個文件並更改代碼。如何啓用自動mysql真正轉義到所有查詢?
謝謝!
我不知道那會有多好。你真正需要的是逃避輸入,而不是表名,字段等。如果你將整個查詢傳遞給一個轉義,我願意打賭你會發現很多的查詢會失敗,因爲它會變成像
select * from tablename where name = 'foo'
into
select * from tablename where name = \'foo\'
這會嗆。
而且,在你的代碼的包裝功能有很大幫助(假設你不希望使用一個框架,等)。如果你的代碼周圍散佈了「mysql_query()」,你可能需要做一些工作來改變它。如果你不能/鴕鳥政策想,採取的框架,至少敷在自己的功能,如「db_query()」是這樣的:
function db_query($query,$and,$other,$arguments)
{
mysql_query(...); // you can change this to some other database later if you want
}
我這樣做的一個項目幾年前,當我想記錄一些錯誤時,它幫助了很多。我只是將它添加到該函數中,而不是將它放在代碼中的200個位置。
但即使這樣,也不會真正幫助,如果你沒有在第一時間逃生正確輸入。在這種情況下,您唯一的選擇是花一些時間並修復它。
如果你有一個大項目,需要改變的數據訪問,我建議移動到ORM,我個人的選擇是波輪。
這樣,您就可以解決整個逃逸SQL的問題,就會使你的應用更靈活,可你也可以扭轉你的數據庫圖表,以便產生所需的波輪類。
行走會給你喜歡的交易,參數和更多的好處,所以你應該reaally考慮一下。
問候
注意到,這不是查詢,你會想逃離,它的用戶提供變量將被包括在查詢(除非你自己故意書寫格式不正確的SQL )。所以你可以做的就是在array_map()
的前面運行mysql_real_escape_string()
,假設你不打算將該數組用於其他任何事情。
mysql_real_escape_string()
仍然只是對這個問題的第二個最好的解決辦法呢。我可以使用準備好的語句(AKA參數化查詢),並且您可以免費回家。
請提供一個例子 - 我不明白文件與mysql_real_escape函數或MySQL有什麼關係...... – 2010-09-04 01:35:10
我認爲他的印象下有一些魔術變量或配置設置,他可以申請,以避免確保他的數據庫相關代碼... – prodigitalson 2010-09-04 01:53:50
ini_set('magic_quotes_gpc',1);不要爲我工作,我只想啓用所有MySQL查詢的魔術引號,這可能嗎? – Ryan 2010-09-04 02:06:08