2009-08-06 23 views
2

私はPHPとSQL Server 2008を使用していますが、PHP 1.0のSQL Server Driverには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に何に依存し、それらをエスケープする方法を知っているだろう、 私は推測する。

あなた自身のエスケープ機能を書く必要はありません。

しかし、確かに、テストすることです:例えば、あなたは一重引用符を含む任意の文字列を注入できますか?見積もりはDBに保存されていますか、エラーが表示されますか?