wpdbクラスのprepare()とMySQLの日時書式指定子が競合する
WordPressのプラグイン作成時などでwpdbクラスを利用する際、MySQLのDATE_FORMAT()関数などの日時フォーマット用書式指定子とwpdbクラスのprepareメソッドのプレースホルダーが競合するので、
<?php
// wp-load.phpと同じディレクトリにこのサンプルコードが有る場合
require_once 'wp-load.php';
global $wpdb;
echo $wpdb->get_var( $wpdb->prepare(
"SELECT DATE_FORMAT(%s, %s)",
date('Y-m-d H:i:s', current_time('timestamp')),
'%Y年%m月%d日'
) );
// "SELECT DATE_FORMAT(%s, '%Y年%m月%d日')" とかやっちゃうとハマる
といった具合にしておけば動くんですけど、wpdbクラスってSQLの文法エラーが発生してもエラーメッセージを表示する記述を追記しておかないとそこで止まって終わり、Webサーバのエラーログにも何も落ちない、サーバステータスは200 OKを返してくれるで「え?」となりがち。