web-dev-qa-db-ja.com

INSERT INTOクエリに対するWordPressデータベースエラー

カスタムテーブルにデータを挿入しようとしています。私は私のバックエンドで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) {
              // ...  
            }
        }

私が間違っていること、またはエラーに関する詳細情報を参照してください。

お返事ありがとうございます。

1
Kare

あなたはfloatをmarket_capに挿入しています。これはbigint型です。この問題が発生する原因とは思われませんが、intval()の代わりにfloatval()を使用するか、フィールドをfloatを処理するフィールドに変更することをお勧めします。

1
Chris Cox