2

これが、私が達成しようとしていることの疑似(偽の)クエリです。

SELECT * FROM myTable
WHERE specific_field IS IN '{$stringPassedIn}'

specific_field次に、結果で、渡された文字列に一致する行を取得したいと思います。

いくつかの調査を行ったところ、反対のものがたくさんあることがわかりました。たとえば、次のようになります。

SELECT * FROM items WHERE items LIKE '%123456%'しかし、これは私が探しているものではありません - 私は信じていません。

これが実際のアプリケーションです。私のphpコードでは、エラー メッセージを抽出します。このエラー メッセージには、特定のエラー コードが含まれています。このエラー文字列を比較して、文字列に正確なエラー コードを含む行を返したいコードのテーブルがあります (上記の最初のクエリのように)。そのため、フレーズ全体をクエリに渡しています。これが可能または実用的である場合はどうなりますか? または、これを達成するためのより良い方法はありますか?

4

2 に答える 2

3

LIKE述語を逆にすることができます。

SELECT * FROM myTable
WHERE '{$errorMessage}' LIKE CONCAT('%', errorCode, '%')

この例を考えてみてください。次の式は true を返します。

'error number 12345 has occurred' LIKE '%12345%'

$errorMessage に特殊文字が含まれている場合は、適切にエスケープするように注意してください。または、準備済みステートメントを使用して、変数をパラメーターとして渡します。

于 2013-11-12T19:22:08.490 に答える
2

MySQL文字列関数を見てください。次のようなことができます

SELECT * FROM myTable
WHERE LOCATE(`specificField`, '{$stringPassedIn}') is not 0
于 2013-11-12T19:23:56.703 に答える