データベースから文字列を選択する際に問題が発生しました。問題は、McDonald's
が行内にあり、文字列mcdonalds
で検索している場合、結果が見つかりませんでした。助言がありますか?MySQLが特殊文字で文字列を選択しています
私はLIKE
をWHERE
文で使用していることを忘れていました。
データベースから文字列を選択する際に問題が発生しました。問題は、McDonald's
が行内にあり、文字列mcdonalds
で検索している場合、結果が見つかりませんでした。助言がありますか?MySQLが特殊文字で文字列を選択しています
私はLIKE
をWHERE
文で使用していることを忘れていました。
検索条件で特定の文字を無視する場合は、検索中に空白でreplace
と入力して検索条件を削除することができます。
この答えはあなたの問題を解決:
FYISELECT *
FROM restaurants
WHERE replace(name, '''', '') like '%mcdonalds%'; -- This will match "McDonald's"
、リテラル単一引用符('
が)ので、あなたが必要とするreplace
にパラメータとして単一引用符を指定するには、二重の単一引用符(''
)のように書かれています行内に4つの引用符(''''
) - 両端に2つ、実際の引用符のために真ん中に二重引用符があります。
特殊文字をエスケープします。
私はあなたがLIKE演算子を探していると信じてSELECT *
FROM restaurants
WHERE name='McDonald\'s';
:
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
EDIT:
私はこれに別の多くの方法を試してみましたが、私の唯一の勧告はどんなコードにあなたを使用することです最初に '\'エスケープを適切な文字に追加するためにクエリを送信している可能性があります。
http://www.php.net/manual/en/function.mysql-real-escape-string.php
...しかし、それはただ事態の完全なコンテキストで推測される:PHPはよくこれを行います。
downvoteを理解していない。 OPは、彼/彼女がすでに好きなように使っていたと述べていませんでした。 upvoteとの補償。 –
入力の問題ではなく、mysql関数についてです。 TRIM機能のようなものですが、空白を取り除く必要があります。特別な文字( ')を削除したいのですが、 – Luka
正しい用語を検索してください。 「Joe」を検索した場合、「Jane」は見つかりませんので、なぜ驚きですか? (また、あなたは本当に決して多くのマクドナルドを続けてはいけません。) –
どうやって探していますか? 'row = 'mcdonalds''を使って直線的に等しいか? – Dirk
私はLIKEを使っていますが、見た目にはうまくいきません。 LIKE row '%$ string%' – Luka