我正在寻找SQL Server的mysql_real_escape_string()
的替代方案。addslashes()
是我最好的选择,还是有其他可以使用的替代功能?
mysql_error()
的替代方案也会很有用。
发布于 2009-02-22 12:10:13
addslashes()
并不完全够用,但是PHP包并没有提供任何像样的替代方案。丑陋但完全通用的解决方案是将数据编码为十六进制字符串,即
$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()
。
发布于 2010-03-27 05:01:30
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
发布于 2015-09-09 22:53:27
既然可以在查询中使用参数,为什么还要转义任何东西呢?!
sqlsrv_query(
$connection,
'UPDATE some_table SET some_field = ? WHERE other_field = ?',
array($_REQUEST['some_field'], $_REQUEST['id'])
)
无论你的values参数是否为null
,它都可以正确地选择、删除、更新。做一个原则问题-不要连接SQL,你总是安全的,你的查询读起来更好。
https://stackoverflow.com/questions/574805
复制相似问题