【问题标题】:mysql_real_escape_string alternative for SQL Server [duplicate]SQL Server的mysql_real_escape_string替代品[重复]
【发布时间】:2010-01-27 11:47:23
【问题描述】:

我想知道 PHP 中 SQL Server 转义字符串的等效项是什么?

【问题讨论】:

  • 如果您使用像 PDO 这样的包装器,则不必担心这一点,因为您可以使用参数化查询。如果可以,请使用包装器。
  • 抱歉,没有权限使用 PDO。

标签: php sql-server tsql


【解决方案1】:

好问题,我不知道,但您可以将 PDO::quote()PDO_DBLIB 驱动程序一起使用。


编辑:好像this guygot it from StackOverflow

function mssql_escape($data) {
    if(is_numeric($data))
        return $data;
    $unpacked = unpack('H*hex', $data);
    return '0x' . $unpacked['hex'];
}

另一种选择:

function mssql_escape($str)
{
    if(get_magic_quotes_gpc())
    {
        $str= stripslashes($str);
    }
    return str_replace("'", "''", $str);
}

【讨论】:

  • 它是否适用于 PHP7?因为他们删除了它。
【解决方案2】:

最好的替代方法是使用参数化查询,这样您就不必转义字符串。

如果您仍想自己将查询放在一起,为 SQL Server (T-SQL) 转义字符串文字的正确方法是将字符串中的每个撇号 (') 替换为两个撇号。

【讨论】:

  • 这是否也处理字符串中的空字符、反斜杠等?
  • @ebyrob:是的。顺便说一句,字符串中的反斜杠根本不需要任何特殊处理。
  • 这对所有字符集都有效吗?
【解决方案3】:

简短的回答是:使用您的连接库提供的任何机制,它实际上与数据库无关。如果您使用的是 ADO,则您有参数化查询,如果您使用的是其他东西(我对 PHP 一无所知),那么请使用该库提供的任何内容。

自己动手可能是个坏主意,因为你很可能会出错,例如正确处理注释分隔符。

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多