2011-04-04 20 views
0

使用mysql_real_escape_string簡化轉義字符串我希望能夠編寫一個函數,該函數可以接受任意數量的參數並將函數應用於所有函數。通過引用的PHP通話時間解決方法

事情是這樣的:

function escape() 
{ 
    $args = func_get_args(); 
    array_map('mysql_real_escape_string', $args); 
} 

正如你應該能夠看到,這將依賴於參數傳遞給這個函數的引用。鑑於通話時間參考不能在PHP中完成,對此最好的解決方法是什麼?因爲我有一些功能可以將特定的信息子集寫入數據庫,所以我真的需要像上面這樣的通用函數,而不是隨處調用mysql_real_escape_string

我的測試還表明傳遞給mysql_real_escape_string的參數總是按值傳遞。所以即使我能得到escape()的參考,我的辛勤工作隨後也會被破壞。有沒有辦法解決?

必須有其他人有一個類似的用例,但也許解決方案是直接調用該函數。至少我可以將mysql......換成短名稱的函數,以保持代碼更清晰。這可能只是PHP沒有能夠傳遞指針的情況。

+5

既然你已經標記了這個問題PHP5,你有沒有考慮過搬到PDO?我知道開關似乎讓人頭痛,但參數化的sql在大多數情況下大大減少了對這種冗餘的消毒的需求。 http://www.php.net/manual/en/intro.pdo.php – DeaconDesperado 2011-04-04 18:32:18

回答

1

簡短的回答是,它不漂亮。

長的答案是:

function escape_all(array $args) { 
    foreach($args as &$arg) { 
     $arg = mysql_real_escape_string($arg); 
    } 
} 

escape_all(array(&$foo, &$bar));