Reputation: 31
i have a not difficult question, but I couldn't find an answer.
I have a multidimensional array for insert data with one query. The result is this:
INSERT INTO table (field1, field2, field3, field4) values ('1', '2', '3'),('1', '2', '3'),('1', '2', '3'),('1', '2', '3')
and I want to add one value in each tuple like this:
INSERT INTO table (field1, field2, field3, field4) values ('1', '2', '3','10'),('1', '2', '3','10'),('1', '2', '3','10'),('1', '2', '3','10')
This is the code (I also tried with array_push inside foreach):
$DataArr = array();
for($i=1;$i<5;$i++){
$fieldVal1 = 1;
$fieldVal2 = 2;
$fieldVal3 = 3;
$DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";
}
$id=10;
$new=array();
foreach ($DataArr as $value) {
$value[4]="'$id'";
}
$sql = "INSERT INTO table (field1, field2, field3) values ";
$sql .= implode(',', $DataArr);
print_r($sql);
I tested this code but it doesn't work, can anyone help me?
Upvotes: 0
Views: 87
Reputation: 58
You'd want to set the imploded data to a variable to insert and then bind the param.
$DataArr = array();
for($i = 0; $i < 4; $i++) {
$DataArr[$i] = "1,2,3";
}
$field1_arr = !empty($DataArr[0]) ? implode(",", $DataArr[0]) : "";
$field2_arr .= !empty($DataArr[1]) ? implode(",", $DataArr[1]) : "";
$field3_arr .= !empty($DataArr[2]) ? implode(",", $DataArr[2]) : "";
$field4_arr .= !empty($DataArr[3]) ? implode(",", $DataArr[3]) : "";;
$sql = $connection->prepare("INSERT INTO table (field1, field2, field3, field4) VALUES (?,?,?,?)");
$sql->bind_param("ssss", $field1_arr, $field2_arr, $field3_arr, $field4_arr);
if($sql->execute()) {
// It worked
}
$sql->close();
Upvotes: 0
Reputation: 158
Here is the easy solution
$DataArr = array();
for($i=1;$i<5;$i++){
$fieldVal1 = 1;
$fieldVal2 = 2;
$fieldVal3 = 3;
$DataArr[] = "('$fieldVal1', '$fieldVal2', '$fieldVal3')";
}
$id=10;
$new=array();
foreach ($DataArr as $key =>$value) {
$tmpVal = ltrim($value,"(");
$tmpVal = rtrim($tmpVal,")");
$tmpArray = explode(',',$tmpVal);
array_push($tmpArray,'4');
array_push($new, "(".implode(',',$tmpArray).")");
}
$sql = "INSERT INTO table (field1, field2, field3, field4) values ";
$sql .= implode(',', $new);
print_r($sql);
Upvotes: 1