3 回答

TA貢獻1831條經驗 獲得超10個贊
沒有DB連接就無法安全地轉義字符串。mysql_real_escape_string()
并且準備好的語句需要連接到數據庫,以便它們可以使用適當的字符集轉義字符串-否則,使用多字節字符仍然可能發生SQL注入攻擊。
如果僅測試,那么您可能還可以使用mysql_escape_string()
,它不能100%保證不會受到SQL注入攻擊,但是如果沒有數據庫連接就無法構建任何更安全的東西。

TA貢獻1828條經驗 獲得超3個贊
好吧,根據mysql_real_escape_string函數參考頁:“ mysql_real_escape_string()調用MySQL的庫函數mysql_real_escape_string,它轉義了以下字符:\ x00,\ n,\ r,\,',“和\ x1a?!?/p>
考慮到這一點,那么您發布的第二個鏈接中給出的功能應該完全滿足您的需求:
function mres($value)
{
$search = array("\\", "\x00", "\n", "\r", "'", '"', "\x1a");
$replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");
return str_replace($search, $replace, $value);
}

TA貢獻1847條經驗 獲得超11個贊
與我的其他答案完全相反,即使使用多字節字符,此后續功能也可能是安全的。
// replace any non-ascii character with its hex code.
function escape($value) {
$return = '';
for($i = 0; $i < strlen($value); ++$i) {
$char = $value[$i];
$ord = ord($char);
if($char !== "'" && $char !== "\"" && $char !== '\\' && $ord >= 32 && $ord <= 126)
$return .= $char;
else
$return .= '\\x' . dechex($ord);
}
return $return;
}
我希望比我自己更有知識的人可以告訴我為什么上面的代碼行不通...
添加回答
舉報