javascript/jquery を使用して SQL クエリを生成しています。javascript/jquery スクリプト内で生成および使用している SQL クエリがあります。
このようなもの:
var storeName;
var query = "SELECT * FROM stores where storeName = '" + storeName + "';";
(storeName
ユーザーが html から選択すると、jquery を介して生成されます)
したがって、 「Jackson Deli」storeName
の ような場合、クエリは問題なく実行されます。
しかし、「Jackson's Deli」のstoreName
場合は機能しません。これは、 Jackson's のアポストロフィが引用符のように扱われているためと思われます。クエリをハードコーディングしていた場合、引用符を2倍にすることで引用符をエスケープできることを知っています...だから
SELECT * FROM stores where storeName = 'Jackson''s Deli';
動作するはずです。しかし、私はクエリをハードコーディングしていません。代わりに、ユーザー入力によって生成され、名前にアポストロフィが含まれている場合と含まれていない場合があります。'
この場合、このキャラクターをエスケープするにはどうすればよいですか? Javascript / jquery内で動作する必要があります。
'
inを探して??storeName
に置き換えるif ステートメントを作成する必要がありますか? ''
または、これについて別の方法がありますか?
編集:痛い!通常、はい、クライアント側でクエリを生成する危険性を認識しています。
ですから、ここにもう少し文脈があります。私はcartodbで作業しており、そのドキュメントに従っています。これは、私が話していることと似たようなことをしているレポの例です (他の例もあります)。
https://github.com/CartoDB/cartodb.js/blob/develop/examples/layer_selector.html
cartodb では、データを変更できるクエリを実行することはできません。データを取得できるクエリのみを実行できます。ですから、この引用文字をエスケープする最善の方法は何かをまだ考えています。