我有一系列有关我在PHP脚本网页上找到的链接的信息。
每个链接都需要插入到MySQL myisam表中。
现在,我遍历数组并为每个链接运行插入查询。
是否有更合适的方法可以让我更有效地使用MySQL?
答案 0 :(得分:7)
您可以使用单个语句插入多个记录:
<?php
// Our MySQL query
$sql = "INSERT INTO beautiful (name, age)
VALUES
('Helen', 24),
('Katrina', 21),
('Samia', 22),
('Hui Ling', 25),
('Yumie', 29)";
mysql_query( $sql, $conn );
?>
答案 1 :(得分:2)
您可以使用以下语法在单个语句中插入多个值:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
请参阅Section 12.2.5 of the MySQL manual
如果MySQL服务器与PHP服务器位于不同的主机上,这是特别可取的:在上面的示例中,您只需要一个网络往返而不是三个。
如果网络延迟不是问题(如果MySQL服务器在与PHP相同的服务器上运行),请使用这样的预准备语句:
$dbh = new PDO("mysql:host=127.0.0.1;port=3306;dbname=test", "root", "");
$sth = $dbh->prepare("INSERT INTO links(title, href) VALUES(:title, :href);");
while ($link = getNextLink()) {
$sth->execute( array( "title" => $link->title, "href" => $link->href ) );
}
重复执行时,预处理语句会稍微快一些,因为MySQL服务器必须解析SQL并只运行一次查询计划器/优化器。
如果表有索引,您可以在插入之前禁用它们,并在插入后再次启用它们,这样可以更快地插入行,因为索引不必在每次插入后更新(仅适用于MyISAM,请参阅{{3 }}):
ALTER TABLE links DISABLE KEYS
-- insert rows
ALTER TABLE links ENABLE KEYS
答案 2 :(得分:0)
一段时间或每一个循环足够我想到这一点,因为信息将变得很大,我想象动态。
您可以使用一个查询,但如果您有数百或数千条信息,或者您要使用新数据不断更新数据库,那么带有for或while循环的数组最适合这样做。如果它只是一次性只有几条信息,那么就自己写出QUERY如下
mysql_query(“INSERT INTO table(column1,column2) VALUES ( 'VALUE', 'VALUE'),( 'VALUE', 'VALUE')“);