HOME > blog > WordPress > wpdbクラスのprepare()とMySQLの日時書式指定子が競合する

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を返してくれるで「え?」となりがち。

カテゴリー: WordPress タグ: