私はクエリを作成しています:
$q = sprintf("UPDATE testTable SET Text='%s', [Read]=0, TimeUpdated='%s', [From]='%s' WHERE ID='%s'", ms_escape_string($text), $dateReceived, $from, $convID);
そして私はそれを実行します:
$res = mssql_query($q, $dbhandle);
$text
あらゆる種類の変な文字を含めることができるように、フリー テキストにする必要があります (ここでは ASCII に固執しましょう)。最も単純なシナリオは、$text に引用符が含まれている場合です。$text = "Mc'Donalds"
ms_escape_string関数内では、' を 2 つの引用符で置き換えることにより、これを防止しようとしています。クエリ文字列をエコーします。
UPDATE testTable SET Text='Mc''Donalds', [Read]=0, TimeUpdated='2012-08-03 12:44:49', [From]='bogus' WHERE ID='14'
(注: 同じデータベースで VS サーバー エクスプローラーからこのクエリを実行すると、問題なく動作します)
すべて問題ないように見えます - Mc''Donalds の二重引用符を参照してください - しかし、実行すると失敗します: [mssql_query(): message: Incorrect syntax near 'Mc'
SET QUOTED_IDENTIFIER が原因かもしれないと思ったので試してみました
$q = "SET QUOTED_IDENTIFIER OFF";
$resq = mssql_query($q,$dbhandle);
クエリを実行する前に、葉巻はありません - それでも同じエラーが発生します。
今私は立ち往生しています - 一重引用符を含む文字列を通過させるには何を変更すればよいですか?