2009-08-06 94 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 , 我猜。

我很肯定你不必編寫自己的轉義函數。

儘管如此,最好的做法是測試:例如,您可以注入一些包含單引號的任意字符串嗎?報價是存儲在數據庫中的,還是您收到錯誤?