WordPressのMySQLの独自テーブルがwpdbから消えてた話

WordPressのMySQLの独自テーブルがwpdbから消えてた話

だいぶ前にこの記事を作成したのですが、久々に見たら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に何があったのかは今となっては分かりませんが、今後監視が必要になるかと。

原因分かる方いたら教えてください。