カスタムテーブルにデータを挿入しようとしています。私は私のバックエンドでphpmyadminとMySQL DBを使用しています。しかし、私は次のエラーが出ます:
[28-Jun-2018 19:36:05 UTC] WordPress database error for query INSERT INTO `wp_ticker` (`coin_id`, `price`, `volume_24h`, `market_cap`, `percent_change_1h`, `percent_change_24h`, `percent_change_7d`, `created_at`, `updated_at`) VALUES ('2856', '0.00469682', '1471270', '135309340', '0.56', '-0.45', '-22.2', '2018-06-28 19:36:05', '2018-06-28 19:36:05') made by do_action_ref_array, WP_Hook->do_action, WP_Hook->apply_filters, call_user_func_array, Market->updateMarket
テーブルの構造は次のようになります。
CREATE TABLE {$wpdb->prefix}ticker (
id bigint(20) NOT NULL AUTO_INCREMENT,
coin_id bigint(20) NOT NULL,
price longtext NOT NULL,
volume_24h bigint(20) NOT NULL,
market_cap bigint(20) NOT NULL,
percent_change_1h DECIMAL(15,8) NOT NULL,
percent_change_24h DECIMAL(15,8) NOT NULL,
percent_change_7d DECIMAL(15,8) NOT NULL,
created_at datetime NULL,
updated_at datetime NULL,
PRIMARY KEY (id),
FOREIGN KEY (coin_id) REFERENCES {$wpdb->prefix}coins(id)
);
私は次のようなデータを準備しています。
$resTicker = array(
'coin_id' => intval($coin_id),
'price' => $tick->price,
'volume_24h' => $tick->volume_24h,
'market_cap' => floatval($tick->market_cap),
'percent_change_1h' => floatval($tick->percent_change_1h),
'percent_change_24h' => floatval($tick->percent_change_24h),
'percent_change_7d' => floatval($tick->percent_change_7d),
);
//check if the above ticker record exists already in the db
$recordTickerExists = $wpdb->get_results(
$wpdb->prepare(
"SELECT * FROM {$wpdb->prefix}ticker
WHERE
price = %s
AND coin_id = %s
AND market_cap = %s
LIMIT 1",
floatval($tick->price), $coin_id, floatval($tick->market_cap)
)
);
if ( $recordTickerExists == 0 || $recordTickerExists == null ) {
// ticker does not exists else do nothing
try {
$resTicker['created_at'] = date('Y-m-d H:i:s');
$resTicker['updated_at'] = date('Y-m-d H:i:s');
$wpdb->insert("{$wpdb->prefix}ticker", $resTicker);
} catch (\Exception $ex) {
// ...
}
}
私が間違っていること、またはエラーに関する詳細情報を参照してください。
お返事ありがとうございます。
あなたはfloatをmarket_cap
に挿入しています。これはbigint
型です。この問題が発生する原因とは思われませんが、intval()
の代わりにfloatval()
を使用するか、フィールドをfloatを処理するフィールドに変更することをお勧めします。