シングルクォーテーションを含ませてサイト内検索するとSQLエラーが表示
-
サイト検索時に、シングルクォーテーション(’)を含んだ文字列で検索すると以下のようなエラーが表示されてしまいます。以下は「h’s」というワードで検索した時の表示です。
<strong>WordPress database error</strong>: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's%') OR (wp_posts.post_content LIKE '%h's%'))) OR ((m.meta_value LIKE '%h\'s%'))' at line 1] SELECT DISTINCT wp_posts.* FROM wp_posts LEFT JOIN wp_comments AS cmt ON ( cmt.comment_post_ID = wp_posts.ID ) LEFT JOIN wp_postmeta AS m ON (wp_posts.ID = m.post_id) LEFT JOIN wp_users AS u ON (wp_posts.post_author = u.ID) WHERE 1=1 AND ( ( wp_posts.ID NOT IN (364,354,360,358,350,352,356,362,1955,2192,2207,2201,2202,2203,2204,2205,2206,2068,2116,2087,2086,2088,2091,2083,2090,2089,2080,2082,2081,2084,2085,2054,2013,2171,2159,2155,2156,2158,2160,2157,2154,1843,1871,1882,1879,1995,1872,3450,3815,4316) AND (((((wp_posts.post_title LIKE '%h's%') OR (wp_posts.post_content LIKE '%h's%'))) OR ((m.meta_value LIKE '%h\'s%')) OR (((cmt.comment_content LIKE '%h\'s%')) OR ((cmt.comment_author LIKE '%h\'s%'))) OR ((u.display_name LIKE '%h\'s%')) )) AND wp_posts.post_type IN ('post', 'page', 'attachment', 'xxxxx', 'xxxxx', 'xxxxx', 'xxxxx', 'xxxxx', 'xxxxx') AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'closed' OR wp_posts.post_author = 4 AND wp_posts.post_status = 'private' OR wp_posts.post_author = 4 AND wp_posts.post_status = 'hidden')) AND post_type != 'revision') AND post_status != 'future' ORDER BY wp_posts.post_date DESC
( xxxxx はカスタム投稿タイプ名です)
・「h’s」のようにスペースを空けずにシングルクォーテーションを挟んだ場合にエラー
・検索ワードが「h’」や「’s」、「h ‘ s」や「’」ではエラーの表示なしWordPressのバージョン: 3.5.1
サーバーの種類: Linux
PHPのバージョン: 5.3.3
MySQLのバージョン: MySQL 5.0.xネットで調べてみたのですが、同じような症状を解決したとの情報にはたどりつけませんでした。
プラグインもひとつひとつ停止してみましたが症状は改善しませんでした。
$_GET[‘s’]の処理に問題があるのかと思い、htmlspecialchars($_GET[“s”]) や mysql_real_escape_string($_GET[‘s’])を試してみたのですが、同様のエラーが出ます。テーマはゼロから作成した自作テーマを使用しています。
テーマをtwentyelevenなどに切り替えるとエラーは表示されないので、おそらく自作テーマに問題があるのではと思います。
サイト内検索の構造としては、複数のコンテンツごとに検索フォームを設置して、Wordpressのデフォルトのテーブルとは別にテーブルをMysql内に作成し、検索フォームごとに検索対象となるテーブルを振り分けています。その振り分けは、search.php内でフォームから受け取る値によって条件分岐させ、対応するテンプレートを呼び出しています。それらのテンプレート内でSQL文を発行し、データを取り出してくる、という形です。
通常の投稿や固定ページの検索用のテンプレートでは、ごく普通にWordpressループを使用しているのみでSQL文の発行はしていません。が、通常の投稿や固定ページの検索時も、自作テーブルへの検索時も、同様のエラーが出ます。解決方法がわからず困っています。
よろしくお願い致します。
- トピック「シングルクォーテーションを含ませてサイト内検索するとSQLエラーが表示」には新たに返信することはできません。