我有一个如下所示的数组,它是通过分解用户提供的字符串生成的:
// $array = explode(',' $_POST['arrCheckTrans']);
$array = [
'098A',
'mike',
'Street17',
'LA',
'07AA',
'steve',
'Street14',
'LA'
];
我需要一次隔离四个元素,并使用这些值集进行迭代 INSERT 查询。
下面是我的代码:
if ($_POST['action'] == "checktransfertmp") {
$arrCheckTrans = $_POST['arrCheckTrans'];
$trans = explode(",", $arrCheckTrans);
$length = count($trans);
for ($i = 0; $i < $length; $i++) {
print $trans[$i];
}
}
如何为每组值运行插入查询?
array_chunk
。
$chunks = array_chunk($trans, 4);
foreach ($chunks as $chunk) {
// Build your insert string
}
要构建插入字符串(而不是执行多个查询),您可以执行以下操作:
$insertString = 'INSERT INTO myTable(col1, col2, col3, col4) VALUES ';
foreach ($chunks as $chunk) {
$insertString .= ' (' . implode(', ', array_map('escape_function', $chunk)) . ',';
}
$insertString = substr($insertString, 0, -1);
mysqli_real_escape_function
或 array($pdoLink, 'escape')
。在用逗号分解提交的字符串后,您只需将值分成 4 个元素的行,然后将它们安全地插入到数据库中。
代码:(PHPize MySQLi 演示)
$array = [
'098A',
'mike',
'Street17',
'LA',
'07AA',
'steve',
'Street14',
'LA'
];
$stmt = $mysqli->prepare('INSERT INTO my_table (col1, col2, col3, col4) VALUES (?,?,?,?)');
foreach (array_chunk($array, 4) as $row) {
$stmt->execute($row);
}
var_export(
$mysqli->query('SELECT * FROM my_table')->fetch_all(MYSQLI_ASSOC)
);
或几乎相同的代码:(PHPize PDO 演示)
$array = [
'098A',
'mike',
'Street17',
'LA',
'07AA',
'steve',
'Street14',
'LA'
];
$stmt = $pdo->prepare('INSERT INTO my_table (col1, col2, col3, col4) VALUES (?,?,?,?)');
foreach (array_chunk($array, 4) as $row) {
$stmt->execute($row);
}
var_export(
$pdo->query('SELECT * FROM my_table')->fetchAll(PDO::FETCH_ASSOC)
);
使用 array_chunk 将数组分割成块,插入语句可以通过查询插入多行,如下所示:
$output = array_chunk( $trans, 4 );
foreach ( $output as $key => $value ) {
$output[$key] = '(' . implode( ',', $value ) . ')';
}
$query = 'INSERT INTO tbl_name (a,b,c,d) VALUES ' . implode( ',', $output );
// INSERT INTO tbl_name (a,b,c,d) VALUES (098A,mike,Street17,LA),(07AA,steve,Street14,LA)
echo $query;