NVARCHAR
の列firstName
を持つテーブルがあります。私は部分名で検索するためのクエリを書いています。準備されたステートメントを使用してSQLSERVERのUnicodeデータを検索する
$params[':firstName'] = "%วุฒิหิรัญทิ%";
$query = "SELECT * FROM users WHERE firstName LIKE :firstName";
$matches = $this-db->fetchAll($query, $params);
これが動作しない、と私はMSSQLで、私はUnicode文字を検索するN
を使用する必要があることを読んだ:私のクエリは次のようになります。準備された声明でこれをどのように達成するのですか? :firstName
をN:firstName
に置き換えようとしましたが動作しませんでした。
EDIT:このソリューションは、Latin 1文字セットの文字で使用できます。そのセットの外側にある文字では機能しません。特殊文字の場合は、SELECT * FROM users WHERE firstName LIKE N'%วุฒิหิรัญท%'
のような直接クエリを実行できますが、正常に動作しますが、プリペアドステートメントで動作するようにはできません。
変数にfirstnameがどのように解析されているのかよくわかっていませんが、「 '」で囲んではいけませんか? '... LIKE ':firstname'' – tobypls
いいえ、準備されたステートメントは、引用符の使用を一般的に避けます。 – charmeleon
[OK]をクリックし、準備文にワイルドカード検索を使用していますか? http://stackoverflow.com/questions/1352002/using-wildcards-in-prepared-statement-mysqli – tobypls