将 4 列行从大小可被四整除的平面数组插入到数据库表中

问题描述 投票:0回答:3

我有一个如下所示的数组,它是通过分解用户提供的字符串生成的:

// $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];
   }
}

如何为每组值运行插入查询?

php arrays loops prepared-statement sql-insert
3个回答
2
投票

您需要使用

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')

2
投票

在用逗号分解提交的字符串后,您只需将值分成 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)
);

0
投票

使用 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;
© www.soinside.com 2019 - 2024. All rights reserved.