我有一个关于如何使用php
创建1k行的小问题,如下面格式的示例 for ($i = 0;$i < 1000;$i++) {
$sql = 'INSERT INTO `tt_test` (`id`, `name` ,`year`,`payment`,`address`) VALUES (null,"asdasdsad'.$i.'",rand(2010,2015),rand('pending','success','failed','refunded'),"abcd'.$i.'")';
$preparesql = $DBH->prepare($sql);
$executesql = $preparesql->execute(array());
}
任何人都可以帮助我....谢谢你-kanth
答案 0 :(得分:2)
您正在使用预备语句。您正在准备查询1000次,但您只需准备一次。
以下是使用PDO的示例:
$sql = "INSERT INTO `tt_test` (`name` ,`year`,`payment`,`address`) VALUES (:name,:year,:payment,:address)";
$preparesql = $DBH->prepare($sql);
for ($i = 0;$i < 1000;$i++) {
$params = array();
$params[':name'] = 'asdasdsad'.$i;
$params[':year'] = rand(2010,2015);
$params[':payment'] = rand('pending','success','failed','refunded');
$params[':address'] = 'abcd'.$i;
$executesql = $preparesql->execute($params);
}
准备查询(一次!)然后添加参数就更容易了。您的代码更易于阅读(和维护),您也可以防止SQL注入。
答案 1 :(得分:0)
明确看看@Mithredate提供的链接,因为MySQL在某个时刻变得笨拙,但这会使你的代码工作:
for ($i = 0;$i < 1000;$i++) {
$sql = 'INSERT INTO `tt_test` (`id`, `name` ,`year`,`payment`,`address`) VALUES (null,"asdasdsad'.$i.'",rand(2010,2015),rand("pending","success","failed","refunded"),"abcd'.$i.'")';
$preparesql = $DBH->prepare($sql);
$executesql = $preparesql->execute(array()); }
编辑:我坚持你所提供的东西,向你展示你有多接近它的工作,Stephan Vierkant的解决方案是一个更好的解决方案,一旦你得到你做错了你的第一次尝试。
答案 2 :(得分:0)
如果没有PHP,这是怎么做的:
create table num(n int not null primary key) engine=InnoDB;
insert num(n)
values (0), (1), (2), (3), (4), (5), (6), (7), (8), (9);
INSERT INTO `tt_test` (`id`, `name`, `year`, `payment`, `address`)
select
null,
concat('asdasdsad', n1.n + n2.n * 10 + n3.n * 100),
floor(2010 + 5 * rand()),
elt(floor(1 + 4 * rand()), 'pending', 'success', 'failed', 'refunded'),
concat('abcd', n1.n + n2.n * 10 + n3.n * 100)
from num n1
join num n2 on 1=1
join num n3 on 1=1;
优点:您有一个“服务表”,您可以使用它来生成序列。
缺点:没有PHP:)
答案 3 :(得分:-1)
由于查询的大小,您可能会遇到执行时问题。 This可能会对您有所帮助。