首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SQL Server中使用PHP转义字符串?

如何在SQL Server中使用PHP转义字符串?
EN

Stack Overflow用户
提问于 2009-02-22 11:54:43
回答 10查看 124.3K关注 0票数 94

我正在寻找SQL Server的mysql_real_escape_string()的替代方案。addslashes()是我最好的选择,还是有其他可以使用的替代功能?

mysql_error()的替代方案也会很有用。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-02-22 12:10:13

addslashes()并不完全够用,但是PHP包并没有提供任何像样的替代方案。丑陋但完全通用的解决方案是将数据编码为十六进制字符串,即

代码语言:javascript
复制
$unpacked = unpack('H*hex', $data);
mssql_query('
    INSERT INTO sometable (somecolumn)
    VALUES (0x' . $unpacked['hex'] . ')
');

抽象地说,这将是:

代码语言:javascript
复制
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()

票数 75
EN

Stack Overflow用户

发布于 2010-03-27 05:01:30

代码语言:javascript
复制
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

票数 42
EN

Stack Overflow用户

发布于 2015-09-09 22:53:27

既然可以在查询中使用参数,为什么还要转义任何东西呢?!

代码语言:javascript
复制
sqlsrv_query(
    $connection, 
    'UPDATE some_table SET some_field = ? WHERE other_field = ?', 
    array($_REQUEST['some_field'], $_REQUEST['id'])
)

无论你的values参数是否为null,它都可以正确地选择、删除、更新。做一个原则问题-不要连接SQL,你总是安全的,你的查询读起来更好。

http://php.net/manual/en/function.sqlsrv-query.php

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/574805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档