J'essaie d'insérer des données dans une table personnalisée. J'utilise une base de données mysql avec phpmyadmin dans mon backend. Cependant, j'obtiens l'erreur suivante:
[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
La structure de la table ressemble à ceci:
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)
);
Je prépare mes données comme suit:
$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) {
// ...
}
}
Des suggestions sur ce que je fais mal ou voir des informations supplémentaires sur l'erreur?
J'apprécie vos réponses!
Vous insérez un float dans market_cap
, qui est de type bigint
. Cela ne semble pas être la cause du problème dans ce cas, mais vous voudrez peut-être utiliser intval()
au lieu de floatval()
ou remplacer le champ par un champ qui gérera un float.