WordPressのMySQLの独自テーブルがwpdbから消えてた話
- 2020.11.29
- プログラミング

だいぶ前にこの記事を作成したのですが、久々に見たら9/2で止まってました。
いや、気づいてはいたんですけど、なんか原因究明がだるくてずるずると放置してました。
cronがおかしいわけでもなく、ちゃんと動いてます。
エラー特定に至った経緯を備忘録も兼ねて公開します。
PHPエラーになんか出てる
logsフォルダにあるphp_error_logファイルに、エラーログがずらっと吐き出されてました。
[27-Nov-2020 18:44:55 UTC] WordPress データベースエラー: 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 ‘WHERE DATE_FORMAT(date, ‘%Y/%m/%d’) = ‘2020/11/27′ ORDER BY favQty’ at line 1 for query SELECT id,text, DATE_FORMAT(date, ‘%Y/%m/%d’) as fdate FROM WHERE DATE_FORMAT(date, ‘%Y/%m/%d’) = ‘2020/11/27’ ORDER BY favQty made by require(‘wp-blog-header.php’), require_once(‘wp-includes/template-loader.php’), include(‘/themes/lionblog/single.php’), the_content, apply_filters(‘the_content’), WP_Hook->;apply_filters, do_shortcode, preg_replace_callback, do_shortcode_tag, getPopulerTweetToday
[27-Nov-2020 19:00:11 UTC] WordPress データベースエラー: Table ‘*****’ doesn’t exist for query SHOW FULL COLUMNS FROM VALUES
made by do_action_ref_array(‘*****’), WP_Hook->do_action, WP_Hook->apply_filters, *****
的なログが毎日出てます。おそらくcronが起動するたびに出てるんだと思います。
SQL構文は合ってるはずなのに構文エラーが出てるってことは、文中で呼び出されてる定数がうまく受け渡しされてないと推測。
ていうかTable doesn’t existなわけないし(phpMyAdminで見るとちゃんとテーブルは存在してる)完全にテーブル名が取得できてない。
SQLをechoしてみる
上記説を立証するため、select文を発行しているところで、echoでsql文をwebに表示させてみました。
お分かりでしょうか。全SQL文の一部ですが、FROM句とWHERE句の間にDB名が入っていません。
このDB取得部分、$wpdb->hogehoge で取得するテーブル名です。
やっぱり、wp_dbがうまく読み込まれてない?
消えてる・・・
wp_includes/wp_db.phpの中を確認しました。
独自テーブルを作成した場合、
var tables = array(
“posts”,
…)
のところにテーブル名を追加しなければなりません。僕はしてました!!絶対してました!!!
今見たら消えてました!!!!!!そのせいでした!!!僕は悪くない!!!
tablesの配列の最後に独自テーブル名を追加したら無事復活しました。
なぜ消えたのかはわかりません。アップデートとか走ると消えたりするのかな?
9/2に何があったのかは今となっては分かりませんが、今後監視が必要になるかと。
原因分かる方いたら教えてください。
-
前の記事
軽が軽を煽るな 2020.11.28
-
次の記事
2020年買ってよかったもの25選 2020.12.09