如何使用PHP在SQL Server中转义字符串?
2022-08-30 07:47:09
我正在寻找SQL Server的替代方案。是我的最佳选择还是可以使用其他替代功能?mysql_real_escape_string()
addslashes()
另一种办法也是有用的。mysql_error()
我正在寻找SQL Server的替代方案。是我的最佳选择还是可以使用其他替代功能?mysql_real_escape_string()
addslashes()
另一种办法也是有用的。mysql_error()
addslashes()
并不完全足够,但是PHP的mssql包没有提供任何像样的替代方案。丑陋但完全通用的解决方案是将数据编码为十六进制字节串,即
$unpacked = unpack('H*hex', $data);
mssql_query('
INSERT INTO sometable (somecolumn)
VALUES (0x' . $unpacked['hex'] . ')
');
抽象地说,这将是:
function mssql_escape($data) {
if(is_numeric($data))
return $data;
$unpacked = unpack('H*hex', $data);
return '0x' . $unpacked['hex'];
}
mssql_query('
INSERT INTO sometable (somecolumn)
VALUES (' . mssql_escape($somevalue) . ')
');
mysql_error()
等效值为 。mssql_get_last_message()
function ms_escape_string($data) {
if ( !isset($data) or empty($data) ) return '';
if ( is_numeric($data) ) return $data;
$non_displayables = array(
'/%0[0-8bcef]/', // url encoded 00-08, 11, 12, 14, 15
'/%1[0-9a-f]/', // url encoded 16-31
'/[\x00-\x08]/', // 00-08
'/\x0b/', // 11
'/\x0c/', // 12
'/[\x0e-\x1f]/' // 14-31
);
foreach ( $non_displayables as $regex )
$data = preg_replace( $regex, '', $data );
$data = str_replace("'", "''", $data );
return $data;
}
这里的一些代码是从CodeIgniter中扯下来的。效果很好,是一个干净的解决方案。
编辑:上面的代码片段有很多问题。请不要在没有阅读评论的情况下使用它来了解它们是什么。更好的是,请不要使用它。参数化查询是你的朋友:http://php.net/manual/en/pdo.prepared-statements.php