将值插入数据库1000倍

时间:2014-09-29 19:23:56

标签: php mysql sql

我想在数据库中输入一些值1000倍。

示例:

      <?php
     $n = rand(1,30000);
    $n2 = $n."20";
for($i=1;$i=1000;$i++){
mysql_query("INSERT INTO reedem(5) VALUES ('".$n2."')");
}
?>

我怎么能正确地做到这一点?

4 个答案:

答案 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
    )
);