带数据范围的 Mysqli 通配符插入

Mysqli Wild Card Insert with data range

我有一个非常大的数据(不是文件)要插入到学生的数据库中。将它的每一英寸打字、循环和插入都将非常困难。但是,它遵循特定的模式并且在特定数字范围内。

下面是我所说的例子。

学生参考编号

样本范围:APS00001 - APS02000

前三个字符是常量。但其余的不是。必须根据给定范围插入数据。

<?php mysqli_query($conn,"INSERT INTO table (reference) VALUES('each of the data in the sample range')"); ?>

所以我可以使用这段代码生成序列

<?php
$array_items = array();

for ($i=0; $i <= 2000; $i++) { 
  $array_items[] .= $i;
}
print_r($array_items); // prints the sequence
?>

这是针对您的 INSERT 问题的 SQL 解决方案。

运行 从 1 到 2000 循环。它生成 APS0001,并在其运行时填充数字。

DELIMITER $$

DROP PROCEDURE IF EXISTS insert_data $$

CREATE PROCEDURE insert_data ()

BEGIN

DECLARE count INT DEFAULT 1;

WHILE count <= 2000 DO
    INSERT INTO `tbl1`(`col3`) VALUES(CONCAT("APS",LPAD(count, 4, '0')));
    SET count = count + 1;
END WHILE;

END $$

DELIMITER ;

CALL insert_data();

由于原post已更新,这里PHP解决方案:

<?php
// add $conn info

for ($i = 1; $i <= 2000; $i++) {
    $insdata = "APS" . str_pad($i, 5, "0", STR_PAD_LEFT);
    mysqli_query($conn,"INSERT INTO table (reference) VALUES('$insdata')");
}
?>

您应该使用带参数绑定的预准备语句。要将字符串填充到给定长度,请使用 str_pad()。您可以使用 CONCAT().

在 PHP 或 SQL 中添加 APS 字符串
$sql = "INSERT INTO table (reference) VALUES(CONCAT('APS', ?))";
$stmt = $db->prepare($sql);
$stmt->bind_param('s', $value_to_be_inserted);

$array_items = array();
for ($i = 1; $i < 20; $i++) {
    $array_items[] .= +$i;

    $value_to_be_inserted = str_pad($i, 5, '0', STR_PAD_LEFT);
    $stmt->execute();
}

不要循环准备。只在循环内执行。