回答編集履歴

1

訂正

2018/02/05 06:46

投稿

ttyp03
ttyp03

スコア16998

test CHANGED
@@ -1,6 +1,4 @@
1
1
  名前付きプレースホルダにしないほうが楽かもしれませんね。
2
-
3
- また全カラム指定なら、カラム名を列挙しなくてよいと思います。
4
2
 
5
3
  つまりこんな感じのSQL文を生成すればよいかと。
6
4
 
@@ -8,7 +6,7 @@
8
6
 
9
7
  ```SQL
10
8
 
11
- INSERT INTO テーブル名 VALUES(?,?,?)
9
+ INSERT INTO テーブル名(列1,列2,列3) VALUES(?,?,?)
12
10
 
13
11
  ```
14
12
 
@@ -22,13 +20,21 @@
22
20
 
23
21
 
24
22
 
23
+ // 可変部分の収集
24
+
25
+ for($i = 0; $i < count($data[$table]); $i++){
26
+
27
+ $cols[] = "`$i`";
28
+
29
+ $ph[] = "?";
30
+
31
+ }
32
+
33
+
34
+
25
35
  // SQL文
26
36
 
27
- $sql = "INSERT INTO $table VALUES (";
28
-
29
- foreach($data[$table] as $v) $ph[] = "?";
30
-
31
- $sql .= implode(",", $ph) . ")";
37
+ $sql = sprintf("INSERT INTO %s(%s) VALUES(%s)", $table, implode(",", $cols), implode(",", $ph);
32
38
 
33
39
 
34
40