ColdFusion 11 と MySQL5 データベースを使用しており、すべてが UTF-8 文字エンコーディングに設定されています。選択に一重引用符が含まれていると、選択が正しく機能しません。簡単な例を次に示します。
私は単純なSQLを持っています:
select * from table where column = 'I've got a single quote';
私のSQLクライアントでは、これを変更して一重引用符をエスケープする必要があるため、次のようになります。
select * from table where column = 'I''ve got a single quote';
そして、これは正しく機能します。
ColdFusion では、クエリは次のようになります。
<cfquery name="qryName" datasource="dsn">
select * from table where column = <cfqueryparam CFSQLType="CF_SQL_VARCHAR" value="I've got a single quote" />
</cfquery>
ただし、行は返されず、エラーはありません。
私も preserveSingleQuotes を使用してみましたが、まだ何も返されません:
<cfqueryparam CFSQLType="CF_SQL_VARCHAR" value="#preserveSingleQuotes(I've got a single quote)#" />
誰が何が悪いのか提案できますか?
--- 非発行 ---
私のテストは十分ではなかったようです。私がテストしていたデータは、私が期待したものではないことが判明しました。JSON パケットからデータを取得していました。ブラウザにダンプすると、次の文字列が表示されました。
Didn't vote
しかし、実際のパケットを調べると、文字列の JSON 表現が次のようになっていることがわかりました。
Didn't vote
したがって、データベースにあるものと一致しませんでした。残念ながら、これは問題ではなく、cfqueryparam の力に対するすべての信頼が回復しました :-)