我想在数据库中输入一些值1000倍。
示例:
<?php
$n = rand(1,30000);
$n2 = $n."20";
for($i=1;$i=1000;$i++){
mysql_query("INSERT INTO reedem(5) VALUES ('".$n2."')");
}
?>
我怎么能正确地做到这一点?
答案 0 :(得分:1)
你的循环不正确:
for($i=1;$i=1000;$i++){
^^^^^^^
那应该是$i == 1000
- 你将1000
分配给$ i,并将其转换为无限循环 - 因为`$ i = 1000将始终是一个“真”值,循环永远不会结束。
您的INSERT查询不正确:
mysql_query("INSERT INTO reedem(5) VALUES ('".$n2."')");
^---
除非转义字段,否则不能仅使用数字命名字段:
mysql_query("INSERT INTO reedem(`5`) VALUES ('".$n2."')");
^-^---
即便如此,这仍然不是一个好主意。
答案 1 :(得分:0)
当您需要多次运行相同的查询时,预准备语句非常有用。
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO redeem (myColumnName) VALUES (?)");
$n = rand(1,30000) . '20';
$stmt->bind_param("i",$n);
foreach(range(1,1000) as $i) {
$stmt->execute();
}
$stmt->close();
如果要插入1000个不同的随机值(而不是相同的随机值1000次),请在循环中移动定义$n
的代码
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("INSERT INTO redeem (myColumnName) VALUES (?)");
$stmt->bind_param("i",$n);
foreach(range(1,1000) as $i) {
$n = rand(1,30000) . '20';
$stmt->execute();
}
$stmt->close();
答案 2 :(得分:0)
似乎您想要将120到3000020之间的随机值插入到表的字段中。您可以通过一次更新来实现:
UPDATE table SET field = ROUND(30000*RAND()+20)
如果表行已经存在,那么您将不需要INSERT
。例如,该表可以是users
。如果您确实需要执行插入操作,并且无法使用更新,则可以在一个命令中执行多次插入:
INSERT INTO table (column)
VALUES (ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20)),
(ROUND(30000*RAND()+20));
因此,对于10个插入,您只需要循环100次,这将更快。
正如其他人所说,你不应该再使用mysql扩展了。转到mysqli或PDO。准备好的陈述也有助于提高效率。
答案 3 :(得分:0)
如果要插入许多相同的值,可以使用 insert-select ,其中 select 选择1000行。您可以使用包含1000行的表,也可以使用从中选择前1000行的较大表,或者使用 connect by 动态生成1000行,如下所示:
select level
from dual
connect by level <= 100
;
这为您提供了100行一列,其值为数字1 ... 100.(这是oracle语法,对于在mySql中执行此操作的等效方法,请参阅here。)。
因此,要将值为42的1000行插入xxx.x列,您可以
insert into xxx (
select 42
from (
select level
from dual
connect by level <= 100
)
);