サーバーをphp5.2から5.3.3にアップグレードしたところ、PDO(DBLIBを使用)で奇妙なエラーが発生しました。
SQL Server 2005に接続しています。パラメータの前に「N」文字が付いているステートメントにエラーが表示されます(SQL Serverにユニコード文字列であることを通知するため)。
クエリは次のようになります。
INSERT INTO IPs (IP, PosterId, Note, DateAdded, Status, IsClass)
VALUES (:ip, :posterid, N:note, GETUTCDATE(), :status, :isclass)
古い設定で正しく機能するために使用され、新しい設定は例外をスローします
。SQLSTATE [HY093]:無効なパラメーター番号:バインドされた変数の数がトークンの数と一致しません
パラメータの前のN文字を削除すると、正しく機能するようです。しかし、私にはそのような何千ものステートメントがあり、それを取り除くのは苦痛でしょう。なぜこれが起こるのかを調べて修正したいと思います。
これを機能させる方法はありますか?
ありがとう
後で編集:以下に静止しているおかげで、名前のないパラメーター(疑問符)を使用すると機能することがわかりました。しかし、それでも多くのステートメントを変更する必要があります。
したがって、これは機能します。
INSERT INTO IPs (IP, PosterId, Note, DateAdded, Status, IsClass)
VALUES (?, ?, N?, GETUTCDATE(), ?, ?)