[英]How to loop through array elements to create multiple insert queries
我有一个$ _POST数组,当前采用以下形式:
["Area"]=> array(2) {
[0]=> string(5) "Title"
[1]=> string(5) "Title"
}
["Issue"]=> array(2) {
[0]=> string(3) "111"
[1]=> string(7) "2222222"
}
["Elevation"]=> array(2) {
[0]=> string(8) "11111111"
[1]=> string(7) "2222222"
}
["Fix"]=> array(2) {
[0]=> string(8) "11111111"
[1]=> string(6) "222222"
}
["ExpectFee"]=> array(2) {
[0]=> string(8) "11111111"
[1]=> string(5) "22222"
}
["Outlay"]=> array(2) {
[0]=> string(9) "111111111"
[1]=> string(9) "222222222"
}
["ExpctTime"]=> array(2) {
[0]=> string(9) "111111111"
[1]=> string(11) "22222222222"
}
["Checkbox"]=> array(2) {
[0]=> string(12) "111111111111"
[1]=> string(11) "22222222222"
}
我目前正在这样循环浏览...
if ($_POST['OthProb']['Issue'] != '') {
$table = 'tbl_customproblems';
$kv = array();
foreach ($_POST['OthProb'] as $array) {
foreach ($array as $value) {
$kv[] = "'".$value."'";
}
$string = "INSERT INTO $table (AccountID, myID, Area, Issue, Elevation, Fix, ExpectFee, Outlay, ExpctTime, Checkbox) VALUES ('$_POST[AccountID]', '$_POST[myID]', ".join(", ", $kv).")";
}
} else {
$string = $_SERVER['QUERY_STRING'];
}
$sql = $DBH->prepare($string);
$sql->execute();
几乎可以用! 它产生了这个...
"INSERT INTO tbl_customproblems (AccountID, PropertyID, Area, Issue, Elevation, Fix, ExpectFee, Outlay, ExpctTime, WHCheckbox) VALUES ('81', '81', 'Title', 'Title', '111', '2222222', '11111111', '2222222', '11111111', '222222', '11111111', '22222', '111111111', '222222222', '111111111', '22222222222', '111111111111', '22222222222')"
我如何修改循环以产生单独的插入,每行要插入一个。
它必须是这样的:
if ($_POST['OthProb']['Issue'] != '') {
$table = 'tbl_customproblems';
$string = 'INSERT INTO $table (AccountID, myID, Area, Issue, Elevation, Fix, ExpectFee, Outlay, ExpctTime, Checkbox) VALUES (:AccountID, :myID, :Area, :Issue, :Elevation, :Fix, :ExpectFee, :Outlay, :ExpctTime, :Checkbox)';
$sql = $DBH->prepare($string);
$i = 0;
foreach ($_POST['OthProb'] as $array) {
$sql->bindParam(':AccountID', $_POST['AccountID'], PDO::PARAM_INT);
$sql->bindParam(':myID', $_POST['myID'], PDO::PARAM_INT);
$sql->bindParam(':Area', $array['area'][$i], PDO::PARAM_STR); //it can also be PDO::PARAM_STR
$sql->execute();
$i++;
}
}
我并没有约束所有参数,所以您必须自己做,我希望您能通过此示例获得一个prepare语句的想法。
在准备语句时使用PDO::PARAM_INT
当你想要一个整数,你将使用PDO::PARAM_STR
字符串。 如果不确定是整数还是字符串,最好使用PDO::PARAM_STR
我最终使用下面的代码得到了它,它可能最大程度地变拙,我打算在将来对其进行改进,但是它可以工作。
if ($_POST['OthProb']['Issue'] != '') {
$kv = array();
// This will help control the array index
$i = 0;
// count the number of records in the array
$count = count($_POST['OthProb']['Area']);
$table = 'tbl_customproblems';
// Loop through each index - stop before we reach the value of count.
for ($i=0; $i < $count; $i++) {
// Catch the data
foreach ($_POST['OthProb'] as $value) {
$kv[] = "'".$value[$i]."'";
}
// Do the insert!
$string = "INSERT INTO $table (AccountID, PropertyID, Area, Issue, Elevation, Fix, ExpectFee, Outlay, ExpctTime, Checkbox) VALUES ('$_POST[AccountID]', '$_POST[PropertyID]', ".join(", ", $kv).") ";
$sql = $DBH->prepare($string);
$sql->execute();
// Unset data value to prevent retention
unset ($kv);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.