$arr = [];
array_Push( $arr, 'wp_table', 1, '2013-12-24', 3, 'NULL');
$sql_prepare = "INSERT INTO %s (id, datea, one, two) VALUES (%d, %s, %d, %s) ON DUPLICATE KEY UPDATE one = VALUES(one), two = VALUES(two);";
$wpdb->query(
$wpdb->prepare( $sql_prepare,
$arr )
);
上記のコードはdatea
の値2013-12-24
に問題を引き起こすようです。
[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 ''wp_table' (id, datea, one, two) VALUES (1, '201' at line 1]
"INSERT INTO 'wp_table' (id, datea, one, two) VALUES (1, '2013-12-24', 3, 'NULL') ON DUPLICATE KEY UPDATE one = VALUES(one), two = VALUES(two);"
$wpdb->prepare (...)
がなければ、クエリはうまく機能します。
$wpdb->query( "INSERT INTO $table_name (id, datea, one, two) VALUES (1, '2013-12-24', 3, NULL) ON DUPLICATE KEY UPDATE one = VALUES(one), two = VALUES(two);");
日付の値を処理する方法について何かアドバイスはありますか?何がおかしいのですか?さらなる説明をありがとう。
/ edit私はprepareを使いすぎているかもしれませんが、少なくともdatea, one, two
はユーザー投稿の入力です
生成された文字列を見てください。
INSERT INTO 'wp_table' (id, datea, one, two) VALUES (1, '2013-12-24', 3, 'NULL') ON DUPLICATE KEY UPDATE one = VALUES(one), two = VALUES(two);
問題は、テーブル名を囲む引用符です。 prepare
は動的なユーザー指定のコンテンツを対象としており、文字列と数値での使用を意図しています。 。テーブル名はどちらでもありません - あなたのコンテンツがそうであるのと同じ方法ではありません。それは引用符を提供しようとしています、それはあなたの質問を破ることになるでしょう。
あなたは単にテーブル名をクエリに書くことができるはずです。
$arr = array();
array_Push( $arr, 1, '2013-12-24', 3, 'NULL');
$sql_prepare = "INSERT INTO {$wpdb->prefix}table (id, datea, one, two) VALUES (%d, %s, %d, %s) ON DUPLICATE KEY UPDATE one = VALUES(one), two = VALUES(two);";