質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1741閲覧

phpからmysqlへInsertできません。(2)

Tcandy

総合スコア12

INSERT

INSERTとは、行を追加する、コンピュータのデータベース言語SQLにおけるデータ操作言語(DML)ステートメントの1つである

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2018/08/16 10:56

編集2018/08/16 14:55

別ファイルから下記のメソッド(insertmarket)を呼び出そうとしているのですが、うまくいきません。
・データベース接続は正常に動作
・エラーは表示されない

おそらく下記のコードに問題があると推測しているのですが、問題点が分かりそうな方がいましたら、ご教示いただけると幸いです。

MarketSummariesDao.class.php

PHP

1 /** 2 * 3 * @return multitype:string 4 */ 5private function _getFields() { 6 7 $fields = array(); 8 9 $fields[] = 'board_history_id'; 10 $fields[] = 'symbole'; 11 $fields[] = 'pair'; 12 $fields[] = 'last_price'; 13 $fields[] = 'change_rate'; 14 $fields[] = 'high_price'; 15 $fields[] = 'low_price'; 16 $fields[] = 'bid_price'; 17 $fields[] = 'ask_price'; 18 $fields[] = 'volume'; 19 $fields[] = 'btc_volume'; 20 $fields[] = 'trade_count'; 21 $fields[] = 'buy_order_count'; 22 $fields[] = 'sell_order_count'; 23 $fields[] = 'insert_date'; 24 $fields[] = 'insert_datetime'; 25 26 return $fields; 27 } 28 29 /** 30 * データ挿入 31 * @param unknown $pdo 32 * @param unknown $data 33 * @param unknown $date 34 */ 35public function insertMarket($pdo, $data, $date) { 36 37 //読み込まれているか確認 → 動作する 38 file_put_contents(dirname(__FILE__).'/../../log/error.txt', "テスト1", FILE_APPEND ); 39 40 $fields = $this->_getFields(); 41 42 try { 43 44 $sql = ''; 45 $sql .= 'INSERT INTO '; 46 $sql .= 'markets '; 47 $sql .= '('; 48 $sql .= implode(', ', $fields); 49 $sql .= ') VALUES ('; 50 $sql .= 'NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?'; 51 $sql .= ') '; 52 53 $stmt = $pdo->prepare($sql); 54 55 foreach ( $data as $key => $value ) { 56 $stmt->bindValue($key+1, $value, PDO::PARAM_STR); 57 } 58 59 //INSERTの内容を確認する → 動作する 60 file_put_contents(dirname(__FILE__).'/../../log/error.txt', print_r($stmt,TRUE), FILE_APPEND ); 61 62 $stmt->execute(); 63 64 } catch (Exception $e) { 65 echo $e->getMessage(); // 詳細なエラーを表示する 66 exit; 67 } 68 69 //読み込まれているか確認 → 動作しない 70file_put_contents(dirname(__FILE__).'/../../log/error.txt', "テスト2", FILE_APPEND ); 71 }

error.txt

PHP

1テスト1 2PDOStatement Object 3( 4 [queryString] => INSERT INTO markets (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) VALUES (NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) 5)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2018/08/16 11:22

コメントの動作しない、と詳細なエラーの箇所が反応していないのだとするとinsertMarketが呼ばれていない可能性が考えられるのですが、tryの前後でechoやファイル書き込みは成功しますでしょうか?
退会済みユーザー

退会済みユーザー

2018/08/16 11:23

symbole でいいの?
papinianus

2018/08/16 12:00

その末尾で動作してなくてエラーがないなら、呼ばれてなくないですか?関数の先頭で読み込みテストして反応しますか?
papinianus

2018/08/16 12:37

insertMarketが呼ばれてないですね。下記のコードに問題があると思うとのことですが、その捉えかたが違っており、そもそもinsertMarketを呼び出しているはずのほうに問題があります。
papinianus

2018/08/16 12:53

beginTransactionのあと(40or41行)で、var_export($marketSum);var_export($markets);をして、44行目のissetがtrueになり得るのかをご確認ください
papinianus

2018/08/16 14:47

INSERTの内容を確認する → 動作する、においてファイルに$stmtはどう出力されるようになりましたか?
guest

回答2

0

直接の回答じゃないけど、
bindValue()を正確にやるために、
こんなサンプルコードを書いてみました:

php

1<?php 2 3 $fields = array(); 4 5 $fields[] = 'board_history_id'; 6 $fields[] = 'symbole'; 7 $fields[] = 'pair'; 8 $fields[] = 'last_price'; 9 $fields[] = 'change_rate'; 10 $fields[] = 'high_price'; 11 $fields[] = 'low_price'; 12 $fields[] = 'bid_price'; 13 $fields[] = 'ask_price'; 14 $fields[] = 'volume'; 15 $fields[] = 'btc_volume'; 16 $fields[] = 'trade_count'; 17 $fields[] = 'buy_order_count'; 18 $fields[] = 'sell_order_count'; 19 $fields[] = 'insert_date'; 20 $fields[] = 'insert_datetime'; 21 22 $values = $fields; 23 array_walk($values, function(&$val) { $val = ':' . $val;}); 24 $values[0] = 'NULL'; 25 var_dump($values);

イメージ説明

こんな結果が得られるので、配列$valuesを使って的確にbindValue()できそうですね。

投稿2018/08/16 11:36

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tcandy

2018/08/16 11:56

ありがとうございます! bindvalueに置き換えて試してみます
guest

0

自己解決

解決しました
ありがとうござました。

投稿2018/08/20 16:50

Tcandy

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問