6

そのため、これまで出会ったことのない興味深い問題があり、問題の修正に関する多くの情報を見つけることができないようです。膨大な量のデータ (10 年分) を含む大規模なデータベースがあり、それを検索しようとしています。

現在、検索機能は正常に機能していますが、最近誰かが「バグ」について私の注意を喚起しました。期待される結果を得るためにトラブルシューティングを試みましたが、役に立ちませんでした。

これは私の問題です:

誰かが検索でアポストロフィを使用しても、検索が失敗するわけではありませんが、結果が返されません。たとえばPete's、クエリを検索すると実行されますが、何も返されません。はい、クエリに mysql_real_escape_string() があることを確認して、それPete'sPete\'s.

phpmysql の検索機能を使用してクエリを実行しようとしても、奇妙な結果が得られます。クエリは次のようになります。

SELECT * FROM  `smd_article` WHERE  `copy` LIKE  '%Pete\'s%'

しかし、phpmyadmin で検索機能を使用すると、次のようになります。

SELECT * FROM  `smd_article` WHERE  `copy` LIKE  '%Pete''s%'

実際にSQLタブにクエリを入力しても、結果は返されません。しかし、Pete だけを使用すると 17K のレコードが返され、Petes だけを使用すると 3K のレコードが返されます。

したがって、LIKEステートメントを使用してクエリでアポストロフィを許可できるようにするために、私が間違っていること、または行方不明になっていることに興味があります。考え?

4

2 に答える 2

5

で試すmysql_real_escape_string

LIKE '%" . mysql_real_escape_string($find) . "%' 

また

 LIKE  '%Pete%27s%'

または、pdoを使用している場合は、次のようにすることができます

$search ='Pete\'s'
$stmt = $db->prepare("SELECT * FROM  `smd_article` WHERE  `copy` LIKE ?");
$stmt->bindValue(1, "%$search%", PDO::PARAM_STR);
$stmt->execute();
于 2013-02-01T17:07:41.263 に答える
1

問題は'一重引用符が原因ではありません。あなたはそれを正しくエスケープしました。(phpmyadmin の検索機能として):

ストリング: ピートの

MySQL: 'ピート''s'

したがって、次のクエリは機能します。(私はそれをテストしました)

SELECT *
FROM `smd_article`
WHERE copy
LIKE '%Pete''s%'

IN次のステートメントもご覧ください。

SELECT *
FROM `smd_article`
WHERE copy
IN (
 'Pete', 'Pete''s'
)
于 2013-02-01T17:09:03.410 に答える