Wordpressを使って取引所のAPIから仮想通貨の取引情報を表示するシステムをつくっています。
システムの流れは以下です。
1 : CoinexchangeのAPIを使用して、マーケット情報を取得
2 : mysql(phpmyadmin)にInsert
3 : index.phpにて読み込み
2番目のプログラムが書かれているファイルは、レンタルサーバーのcronを使って10分おきに更新し、データベースに保存するようにしています。
今回の問題は、「マーケット情報がmysqlにInsertされない」ということです。
状況はこんな感じです。
・cronはちゃんと作動している
・データベースには接続されている
・auto_incrementは設定済み
・エラーは表示されない
データベースにつなげるコード
php
1public function getPDO() { 2 try { 3 $pdo = new PDO ( 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8', DB_USER, DB_PASSWORD ); 4 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 5 6 return $pdo; 7 8 } catch (PDOException $e) { 9 echo 'データベースへの接続に失敗しました。:'. $e->getMessage(); 10 exit; 11 } 12 }
Insertするコード
php
1public function insertMarket($pdo, $data, $date) { 2 3 try { 4 $sql = ''; 5 $sql .= 'INSERT INTO '; 6 $sql .= 'markets '; 7 $sql .= '(board_history_id, symbole, pair, last_price, change_rate, high_price, low_price, bid_price, ask_price, volume, btc_volume, trade_count, buy_order_count, sell_order_count, insert_date, insert_datetime) '; 8 $sql .= 'VALUES '; 9 $sql .= '(NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) '; 10 11 $stmt = $pdo->prepare($sql); 12 13 foreach ( $data as $key => $value ) { 14 $stmt->bindValue($key+1, $value, PDO::PARAM_STR); 15 } 16 $stmt->execute(); 17 18 } catch (Exception $e) { 19 echo $e->getMessage(); // 詳細なエラーを表示する 20 exit; 21 } 22 23 }
2日程度戦いましたが、原因がいまいちわからず積んでいます。
どなたかお助けいただけると幸いです!
よろしくお願いいたします。
追記
WHEREが使われているコード
PHP
1 /* 最新のマーケットサマリー情報取得*/ 2 public function getLatestMarket($pdo, $coins) { 3 4 try { 5 6 $sql = ''; 7 $sql .= 'SELECT '; 8 $sql .= '* '; 9 $sql .= 'FROM '; 10 $sql .= 'markets '; 11 $sql .= 'WHERE '; 12 $sql .= 'insert_datetime = '; 13 14 $sql .= '( '; 15 $sql .= 'SELECT '; 16 $sql .= 'insert_datetime '; 17 $sql .= 'FROM '; 18 $sql .= 'markets '; 19 $sql .= 'GROUP BY '; 20 $sql .= 'insert_datetime '; 21 $sql .= 'ORDER BY '; 22 $sql .= 'insert_datetime DESC '; 23 $sql .= 'LIMIT 1 '; 24 $sql .= ') '; 25 26 if ( $coins ) { 27 $sql .= 'AND pair IN ('.$coins.') '; 28 } 29 30 $sql .= 'ORDER BY '; 31 $sql .= 'symbole, '; 32 $sql .= 'pair, '; 33 $sql .= 'insert_datetime DESC '; 34 35 $stmt = $pdo->prepare($sql); 36 37 $stmt->execute(); 38 39 return $stmt->fetchAll(); 40 41 } catch ( Exception $e ) { 42 43 echo $e->getMessage(); 44 exit; 45 46 } 47 48 } 49 50 /* 指定期間のマーケットサマリー情報取得*/ 51 public function getBetweenMarket($pdo, $startDatetime, $endDatetime) { 52 53 try { 54 55 $sql = ''; 56 $sql .= 'SELECT '; 57 $sql .= '* '; 58 $sql .= 'FROM '; 59 $sql .= 'markets '; 60 $sql .= 'WHERE '; 61 $sql .= 'insert_datetime = '; 62 $sql .= '('; 63 $sql .= 'SELECT '; 64 $sql .= 'insert_datetime '; 65 $sql .= 'FROM '; 66 $sql .= 'markets '; 67 $sql .= 'WHERE '; 68 $sql .= 'insert_datetime BETWEEN ? AND ? '; 69 $sql .= 'GROUP BY '; 70 $sql .= 'insert_datetime '; 71 $sql .= 'ORDER BY '; 72 $sql .= 'insert_datetime DESC '; 73 $sql .= 'LIMIT 1 '; 74 $sql .= ') '; 75 $sql .= 'ORDER BY '; 76 $sql .= 'symbole, '; 77 $sql .= 'pair '; 78 79 $stmt = $pdo->prepare($sql); 80 $stmt->bindValue(1, $startDatetime, PDO::PARAM_STR); 81 $stmt->bindValue(2, $endDatetime, PDO::PARAM_STR); 82 83 $stmt->execute(); 84 85 return $stmt->fetchAll(); 86 87 } catch ( Exception $e ) { 88 89 echo $e->getMessage(); 90 exit; 91 92 } 93 94 } 95}
回答2件
あなたの回答
tips
プレビュー