【问题标题】:Sql Server 2008 and PHP - sqlsvr_escape_string?Sql Server 2008 和 PHP - sqlsvr_escape_string?
【发布时间】:2009-08-06 19:18:15
【问题描述】:

我使用的是 php 和 sql server 2008,而适用于 PHP 1.0 的 SQL Server 驱动程序没有类似 mysql_real_escape_string 这样的转义字符串。

我只需要用类似的东西替换单引号

function sqlsvr_escape_string($string)
{
  $pattern = "'";
  $replace = "''";
  return(stripslashes(eregi_replace($pattern,$replace,$string)));
}

或者我不需要担心,因为它使用参数化语句?例如

$tsql = "SELECT * from tblUsers where email=(?) AND password=(?)";
$params = array($email, $encryptedPass);
$stmt = sqlsvr_prepare($conn, $tsql, $params);

我能找到的唯一资源是this,上面的 sn-p 来自哪里。

感谢您的帮助和 cmets。

-TK

【问题讨论】:

    标签: php sql-server-2008 escaping


    【解决方案1】:

    后者。如果您使用参数化语句,则无需担心转义 SQL。

    从“客户端编码器”的角度来看(就像您是 SQL Server 的客户端一样),您使用参数化语句的原因是您不相信自己能够正确和/或始终如一地逃避您的价值观。相反,您将该责任外包给创建和维护sqlsvr_prepare(或 AdoDB、Propel 或 Doctrine 等)的编码人员。确保所有数据都正确转义是他们的工作。

    【讨论】:

      【解决方案2】:

      由于它使用准备好的语句(可能称为“参数化语句”),您不需要自己转义数据:驱动程序将知道如何转义这些,这取决于数据库中的内容,我猜。

      我很确定您不必编写自己的转义函数。

      不过,最好的办法是进行测试:例如,你能注入一些包含单引号的任意字符串吗?报价是否存储到数据库中,还是出现错误?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-12
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多