带数据范围的 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();
}
不要循环准备。只在循环内执行。
我有一个非常大的数据(不是文件)要插入到学生的数据库中。将它的每一英寸打字、循环和插入都将非常困难。但是,它遵循特定的模式并且在特定数字范围内。
下面是我所说的例子。
学生参考编号
样本范围: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()
.
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();
}
不要循环准备。只在循环内执行。