2010-09-04 50 views
1

我正在運行php 5.2.13,我有一個包含大量文件的應用程序,但它們都在開始時調用一個文件,我想在該文件中放一些行來自動執行mysql實際轉義任何查詢,因爲我不不想跨越每個文件並更改代碼。如何啓用自動mysql真正轉義到所有查詢?

謝謝!

+0

請提供一個例子 - 我不明白文件與mysql_real_escape函數或MySQL有什麼關係...... – 2010-09-04 01:35:10

+2

我認爲他的印象下有一些魔術變量或配置設置,他可以申請,以避免確保他的數據庫相關代碼... – prodigitalson 2010-09-04 01:53:50

+0

ini_set('magic_quotes_gpc',1);不要爲我工作,我只想啓用所有MySQL查詢的魔術引號,這可能嗎? – Ryan 2010-09-04 02:06:08

回答

4

我不知道那會有多好。你真正需要的是逃避輸入,而不是表名,字段等。如果你將整個查詢傳遞給一個轉義,我願意打賭你會發現很多的查詢會失敗,因爲它會變成像

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個位置。

但即使這樣,也不會真正幫助,如果你沒有在第一時間逃生正確輸入。在這種情況下,您唯一的選擇是花一些時間並修復它。

0

漢斯有一些很好的建議。但我認爲底線是你將不得不修改很多代碼。這個沒有魔力。誰寫的,應該知道的更好,現在你我的朋友要付出代價。就個人而言,如果你將不得不進入手動編輯,我會敦促你切換到PDOmysqli。這樣你就可以使用準備好的語句來處理變量的轉義,只要你正確地使用它們。

+0

你是說,而不是使用'mysqli :: real_escape_string'而不是將批次轉換爲預準備語句? – 2013-11-19 11:59:37

0

如果你有一個大項目,需要改變的數據訪問,我建議移動到ORM,我個人的選擇是波輪。

這樣,您就可以解決整個逃逸SQL的問題,就會使你的應用更靈活,可你也可以扭轉你的數據庫圖表,以便產生所需的波輪類。

行走會給你喜歡的交易,參數和更多的好處,所以你應該reaally考慮一下。

問候

0

注意到,這不是查詢,你會想逃離,它的用戶提供變量將被包括在查詢(除非你自己故意書寫格式不正確的SQL )。所以你可以做的就是在array_map()的前面運行mysql_real_escape_string(),假設你不打算將該數組用於其他任何事情。

mysql_real_escape_string()仍然只是對這個問題的第二個最好的解決辦法呢。我可以使用準備好的語句(AKA參數化查詢),並且您可以免費回家。