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

jckbn6z7  于 2022-10-30  发布在  PHP
关注(0)|答案(3)|浏览(122)

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

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

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

42fyovps

42fyovps1#

您需要使用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_functionarray($pdoLink, 'escape')之类的实数转义函数。
kognpnkq

kognpnkq2#

使用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;
pxyaymoc

pxyaymoc3#

在逗号处分解提交的字符串后,您只需将值分成4个元素的行,然后将它们安全地插入数据库。
代码:(MySQLi Demo

$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)
);

或实际上相同的代码:(PDO Demo

$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)
);

相关问题