2009-08-06 57 views
2

我使用的是PHP和SQL Server 2008,而PHP 1.0的SQL Server驱动程序没有像mysql_real_escape_string那样的类似转义字符串。Sql Server 2008和PHP - sqlsvr_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在上面的代码片段是从。

感谢您的任何帮助和意见。

-TK

回答

2

后来。如果使用参数化语句,则不必担心转义SQL。

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

2

,因为它使用准备好的语句(也许称为“参数化的语句”),你并不需要自己逃生的数据:司机会知道如何逃生者,这取决于是在DB , 我猜。

我很肯定你不必编写自己的转义函数。

尽管如此,最好的做法是测试:例如,您可以注入一些包含单引号的任意字符串吗?报价是存储在数据库中的,还是您收到错误?