我正在将变量传递给执行查询的函数
MySQL连接仅在函数内部发生,并在函数内部关闭
我希望能够在将字符串发送给函数之前安全地转义字符串
我无法使用mysql_real_escape_string,因为它需要MySQL连接(仅在函数内部进行)
我知道简单的答案是在函数内部转义字符串,但是我不能这样做,因为我需要发送字符串的一些转义的和一些非转义的部分
例如,我需要运行以下函数:
myquery("'" . escape_me("My string") . "'");
请注意,我要发送两个不加转义的撇号,其中带有转义的字符串.由于这个原因,我无法对myquery函数内部的参数做一揽子mysql_real_escape_string.
我发现以下代码,建议我可以将其用作mysql_real_escape_string的替代方法:
// escape characters
function escape_me($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;
}
我不知道此功能对多字节攻击是否安全,但我认为每次查询时也需要撤消该功能
例如,输入:
在数据库中测试3的“确定”变为测试3x27s x22OKx22
所以我的主要问题是:
您是否知道是否可以使用另一个函数替代mysql_real_escape_string来安全地转义字符?