teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

12

errorInfo追加

2018/06/04 07:55

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -111,6 +111,10 @@
111
111
  }
112
112
  $sql = sprintf("INSERT INTO %s VALUES %s", $this->table_name, implode(',', $values));
113
113
  $stmt = $this->db->prepare($sql);
114
+ if (!$stmt) {
115
+ echo "\nPDO::errorInfo():\n";
116
+ var_dump($stmt->errorInfo());
117
+ }
114
118
  foreach ($data as $rownum => $row) {
115
119
  foreach ($row as $column => $value) {
116
120
  $stmt->bindValue(':' . $column . $row_num, $value);

11

インデント修正

2018/06/04 07:54

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -101,43 +101,34 @@
101
101
 
102
102
  ```PHP
103
103
  try {
104
- $values = [];
104
+ $values = [];
105
- foreach ($data as $rownum => $row) {//プレースホルダーの生成
105
+ foreach ($data as $rownum => $row) {
106
- $rowvalues = [];
106
+ $rowvalues = [];
107
- foreach ($row as $column => $value) {
107
+ foreach ($row as $column => $value) {
108
- $rowvalues[] = ':' . $column.$rownum;
108
+ $rowvalues[] = ':' . $column . $rownum;
109
+ }
110
+ $values[] = '(' . implode(',', $rowvalues) . ')';
109
111
  }
112
+ $sql = sprintf("INSERT INTO %s VALUES %s", $this->table_name, implode(',', $values));
113
+ $stmt = $this->db->prepare($sql);
114
+ foreach ($data as $rownum => $row) {
115
+ foreach ($row as $column => $value) {
110
- $values[] = '('.implode(',',$rowvalues).')';
116
+ $stmt->bindValue(':' . $column . $row_num, $value);
111
- }
117
+ }
112
-
113
- $sql = sprintf("INSERT INTO %s VALUES %s",$this->table_name,implode(',', $values));
114
- $stmt = $this->db->prepare($sql);//挿入する値は空のまま、SQL実行の準備
115
-
116
- // echo $sql;
117
- foreach ($data as $rownum => $row) {//プレースホルダーの生成
118
- foreach ($row as $column => $value) {
119
- $stmt->bindValue(':' . $column.$row_num, $value);
120
118
  }
119
+ $result = $stmt->execute();
120
+ if ($result) {
121
+ var_dump('成功');
122
+ } else {
123
+ var_dump('失敗');
124
+ }
121
125
  }
122
-
123
- $result = $stmt->execute();//データベースに書き込み実行する
124
-
125
- //簡易チェック
126
- if($result){
127
- var_dump('成功');
128
- }else{
129
- var_dump('失敗');
130
- }
131
- }catch(PDOException $e){
126
+ catch(PDOException $e) {
132
- //エラー出力
133
127
  echo "データベースエラー(PDOエラー)";
134
- var_dump($e->getMessage()); //エラーの詳細を調べる場合、コメントアウトを外す
128
+ var_dump($e->getMessage());
135
129
  }
130
+ return $result;
136
131
 
137
-
138
-
139
- return $result;
140
-
141
132
  }
142
133
 
143
134
  ```

10

try追加

2018/06/04 07:40

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -100,6 +100,7 @@
100
100
  (:no13,:no23,:first_name3,:last_name3,:email3)'
101
101
 
102
102
  ```PHP
103
+ try {
103
104
  $values = [];
104
105
  foreach ($data as $rownum => $row) {//プレースホルダーの生成
105
106
  $rowvalues = [];
@@ -127,5 +128,16 @@
127
128
  }else{
128
129
  var_dump('失敗');
129
130
  }
131
+ }catch(PDOException $e){
132
+ //エラー出力
133
+ echo "データベースエラー(PDOエラー)";
134
+ var_dump($e->getMessage()); //エラーの詳細を調べる場合、コメントアウトを外す
135
+ }
130
136
 
137
+
138
+
139
+ return $result;
140
+
141
+ }
142
+
131
143
  ```

9

bindValueの返り値削除

2018/06/04 06:57

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -115,12 +115,10 @@
115
115
  // echo $sql;
116
116
  foreach ($data as $rownum => $row) {//プレースホルダーの生成
117
117
  foreach ($row as $column => $value) {
118
- $bool_value[] = $stmt->bindValue(':' . $column.$row_num, $value);
118
+ $stmt->bindValue(':' . $column.$row_num, $value);
119
119
  }
120
120
  }
121
121
 
122
- //var_dump($bool_value);//True取るようになりました。
123
-
124
122
  $result = $stmt->execute();//データベースに書き込み実行する
125
123
 
126
124
  //簡易チェック

8

ver_dump($sql)の結果追加

2018/06/04 06:10

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -90,8 +90,15 @@
90
90
 
91
91
  ###修正後コード
92
92
  以下の通りコードの変更いたしました。
93
- こちらでも、書き込み失敗します
93
+ こちらでも、書き込み失敗します
94
94
 
95
+ SQL構文
96
+ 'INSERT INTO テーブル名 VALUES
97
+ (:no10,:no20,:first_name0,:last_name0,:email0),
98
+ (:no11,:no21,:first_name1,:last_name1,:email1),
99
+ (:no12,:no22,:first_name2,:last_name2,:email2),
100
+ (:no13,:no23,:first_name3,:last_name3,:email3)'
101
+
95
102
  ```PHP
96
103
  $values = [];
97
104
  foreach ($data as $rownum => $row) {//プレースホルダーの生成

7

修正後コードの修正

2018/06/04 05:53

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -108,11 +108,11 @@
108
108
  // echo $sql;
109
109
  foreach ($data as $rownum => $row) {//プレースホルダーの生成
110
110
  foreach ($row as $column => $value) {
111
- $stmt->bindValue(':' . $column.$row_num, $value);
111
+ $bool_value[] = $stmt->bindValue(':' . $column.$row_num, $value);
112
112
  }
113
113
  }
114
114
 
115
- //var_dump($values);//True取るようになりました。
115
+ //var_dump($bool_value);//True取るようになりました。
116
116
 
117
117
  $result = $stmt->execute();//データベースに書き込み実行する
118
118
 

6

column問題修正

2018/06/04 05:27

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -106,13 +106,10 @@
106
106
  $stmt = $this->db->prepare($sql);//挿入する値は空のまま、SQL実行の準備
107
107
 
108
108
  // echo $sql;
109
- $values = [];
110
109
  foreach ($data as $rownum => $row) {//プレースホルダーの生成
111
- $rowvalues = [];
112
110
  foreach ($row as $column => $value) {
113
- $rowvalues[] = ':' . $column.$rownum;
111
+ $stmt->bindValue(':' . $column.$row_num, $value);
114
112
  }
115
- $values[] = $stmt->bindValue(':' . $column.$row_num, $value);//成功した場合True、失敗した場合Falseが返ってくる
116
113
  }
117
114
 
118
115
  //var_dump($values);//True取るようになりました。

5

コード追加

2018/06/04 05:14

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -86,4 +86,44 @@
86
86
 
87
87
  ### 試したこと
88
88
 
89
- var_dump($data)や、簡易チェックを用いたり、実際に動作してやってみたのですが、データベースのほうに挿入されません・・
89
+ var_dump($data)や、簡易チェックを用いたり、実際に動作してやってみたのですが、データベースのほうに挿入されません・・
90
+
91
+ ###修正後コード
92
+ 以下の通りコードの変更いたしました。
93
+ こちらでも、書き込み失敗します
94
+
95
+ ```PHP
96
+ $values = [];
97
+ foreach ($data as $rownum => $row) {//プレースホルダーの生成
98
+ $rowvalues = [];
99
+ foreach ($row as $column => $value) {
100
+ $rowvalues[] = ':' . $column.$rownum;
101
+ }
102
+ $values[] = '('.implode(',',$rowvalues).')';
103
+ }
104
+
105
+ $sql = sprintf("INSERT INTO %s VALUES %s",$this->table_name,implode(',', $values));
106
+ $stmt = $this->db->prepare($sql);//挿入する値は空のまま、SQL実行の準備
107
+
108
+ // echo $sql;
109
+ $values = [];
110
+ foreach ($data as $rownum => $row) {//プレースホルダーの生成
111
+ $rowvalues = [];
112
+ foreach ($row as $column => $value) {
113
+ $rowvalues[] = ':' . $column.$rownum;
114
+ }
115
+ $values[] = $stmt->bindValue(':' . $column.$row_num, $value);//成功した場合True、失敗した場合Falseが返ってくる
116
+ }
117
+
118
+ //var_dump($values);//True取るようになりました。
119
+
120
+ $result = $stmt->execute();//データベースに書き込み実行する
121
+
122
+ //簡易チェック
123
+ if($result){
124
+ var_dump('成功');
125
+ }else{
126
+ var_dump('失敗');
127
+ }
128
+
129
+ ```

4

PHP整形

2018/06/04 05:00

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -48,41 +48,40 @@
48
48
  ```
49
49
 
50
50
  ```php
51
- public function Insert($data) {
51
+ public function Insert($data) {
52
52
      foreach ($data as $key => $val) {//プレースホルダーの生成
53
53
        foreach ($val as $key2 => $val2) {
54
54
           $values[] = ':' . $key2;
55
55
        }
56
56
      }
57
57
 
58
- /*
58
+ /*
59
- こちらは正常、ただし一つだけしか入らない。
59
+ こちらは正常、ただし一つだけしか入らない。
60
- $sql = "INSERT INTO $this->table_name VALUES
60
+ $sql = "INSERT INTO $this->table_name VALUES
61
- (1, 1,'名前', 'なし' , 'mailaddress@ddd.jp')";
61
+ (1, 1,'名前', 'なし' , 'mailaddress@ddd.jp')";
62
- */
62
+ */
63
- $sql = sprintf("INSERT INTO %s VALUES (%s)",$this->table_name,implode(',', $values));
63
+ $sql = sprintf("INSERT INTO %s VALUES (%s)",$this->table_name,implode(',', $values));
64
64
 
65
65
 
66
- $stmt = $this->db->prepare($sql);//挿入する値は空のまま、SQL実行の準備
66
+ $stmt = $this->db->prepare($sql);//挿入する値は空のまま、SQL実行の準備
67
67
 
68
- foreach ($data as $key => $val) {
68
+ foreach ($data as $key => $val) {
69
- foreach ($val as $key2 => $val2) {
69
+ foreach ($val as $key2 => $val2) {
70
- $stmt->bindValue(':' . $key2, $val2);//成功した場合True、失敗した場合Falseが返ってくる
70
+ $stmt->bindValue(':' . $key2, $val2);//成功した場合True、失敗した場合Falseが返ってくる
71
- }
71
+ }
72
- }
72
+ }
73
73
 
74
- $result = $stmt->execute();//データベースに書き込み実行する
74
+ $result = $stmt->execute();//データベースに書き込み実行する
75
75
 
76
- //簡易チェック
76
+ //簡易チェック
77
- if($result){
77
+ if($result){
78
- var_dump('成功');
78
+ var_dump('成功');
79
- }else{
79
+ }else{
80
- var_dump('失敗');
80
+ var_dump('失敗');
81
- }
81
+ }
82
82
 
83
- return $result;
83
+ return $result;
84
84
  }
85
-
86
85
  ```
87
86
 
88
87
  ### 試したこと

3

インテント修正

2018/06/04 02:39

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -46,16 +46,15 @@
46
46
 
47
47
 
48
48
  ```
49
- ```
49
+
50
50
  ```php
51
51
  public function Insert($data) {
52
+     foreach ($data as $key => $val) {//プレースホルダーの生成
53
+       foreach ($val as $key2 => $val2) {
54
+          $values[] = ':' . $key2;
55
+       }
56
+     }
52
57
 
53
- foreach ($data as $key => $val) {//プレースホルダーの生成
54
- foreach ($val as $key2 => $val2) {
55
- $values[] = ':' . $key2;
56
- }
57
- }
58
-
59
58
  /*
60
59
  こちらは正常、ただし一つだけしか入らない。
61
60
  $sql = "INSERT INTO $this->table_name VALUES

2

修正

2018/06/04 02:24

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -1,9 +1,9 @@
1
1
  ### 前提・実現したいこと
2
- 配列のデータを、ISERTしたい。
2
+ 配列のデータを、MYSQLのデータベースへISERTしたい。
3
3
 
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
- 配列のINSERTがうまくいかず、どうしても解決できないのでアドバイスを頂ければと思います。
6
+ 配列のINSERTがうまくいかず、どうしても失敗した場合Falseが返ってきて、解決できないのでアドバイスを頂ければと思います。
7
7
  当方としては、どこか原因かわからないのでぜひお願いします。
8
8
  ※DB接続自体は問題ないです。
9
9
 

1

テーブルのデータ型追記

2018/06/04 02:18

投稿

kirin311
kirin311

スコア53

title CHANGED
File without changes
body CHANGED
@@ -8,7 +8,7 @@
8
8
  ※DB接続自体は問題ないです。
9
9
 
10
10
  テーブル
11
- |no1|no2|first_name|last_name|email
11
+ |no1(int)|no2(int)|first_name(varchar)|last_name(varchar)|email(varchar)
12
12
  |:--|:--|--|
13
13
  |1|1|tokumei|kibou| mailaddress
14
14