C で記述された CGI スクリプトで SQL クエリを作成しようとしています。ユーザーはページをクエリするときに何らかのパラメーターを渡し、スクリプトは次のクエリを実行する必要があります。
SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%{parameter}%'
エスケープとセキュリティの問題のため、{parameter} を %s に置き換えて sprintf を文字列に置き換えることは明らかにできません。
したがって、準備済みステートメントを作成しました。
const char * statement = "SELECT `name`, `address`, `phone_number` FROM `restaurants` WHERE `name` LIKE '%?%'";
結局、疑問符が解析されず、バインディングが失敗します。ステートメントの末尾を " name
LIKE ?" に変更すると、これは完全に機能しますが、用語を等しくするのではなく、その用語を含む結果が失われます。これは悪いことです。
これを回避し、文字列内に LIKE とパラメーターを使用して SQL ステートメントを適切かつ安全に構築することは可能ですか?
ありがとう!