function Query()
{
$args = func_get_args();
if (sizeof ($args) > 0)
{
$query = $args[0];
for ($i = 1; $i < sizeof ($args); $i++)
$query = preg_replace ("/\?/", "'" . mysql_real_escape_string ($args[$i]) . "'", $query, 1);
}
else
{
return FALSE;
}
我有這樣的功能。基本上,我做出這樣的查詢:mysql(i)_real_escape_string,安全依賴?
$this->Query('SELECT * FROM USERS WHERE Username = ? AND Points < ?', $username, $points);
它目前支持棄用mysql
功能,但適應mysqli
會在我的類mysqli
更換mysql
一樣簡單。
這是一個安全的方法來依靠對SQL注入攻擊?每個問號都被mysql_real_escape_string
自動消毒,我從來沒有遇到過問題,但是我應該使用mysqli_real_escape_string
進行消毒?
我知道的mysqli的預處理語句,但使用bindParam
每個變量似乎有點矯枉過正了我。
您認爲如何?
*「似乎有點矯枉過正」?* *「矯枉過正」有一個簡單,可靠,難以搞砸的機制來確保查詢語法的有效性並防止SQL注入? – deceze 2013-03-13 15:55:43
*「,但對每個變量使用'bindParam'似乎對我有點矯枉過正」*什麼?真的嗎?這從來沒有矯枉過正。 – 2013-03-13 15:55:48
不能依賴mysql_real_escape_string(可以在不依賴嵌入字符串的情況下執行「小型桌面表」);準備好的語句可能看起來過分了......直到數據庫被入侵的地步 – 2013-03-13 15:55:54