1

我想从数组中插入数据。下面是一个示例情况。

我在朋友列表 (fb) 中获取所有可用的朋友并将它们存储在一个数组中。

现在我想将他们的数据 ( name, fbid, birthday) 插入到表中。

目前我正在使用 for 循环执行此操作,下面是示例代码。

<?php

  $friendsname = $_POST['name'];
  $friendsfbid = $_POST['fbid'];
  $friendsbday = $_POST['birthday'];

  for($i<0;count($friendsfbid);$i++){

     $sql_query  = "INSERT INTO table (fbid, name, birthday) VALUES ('$friendsfbid[$i]','$friendsname[$i]','$friendsbday[$i]') ON DUPLICATE KEY UPDATE fbid='$friendsfbid[$i]', name='$friendsname[$i]', birthday='$friendsbday[$i]'";    

  }

?>

现在,如果我有 300 个朋友,这将循环 300 次。

朋友数量越多,处理数据所需的时间就越多。

有没有办法避免这种情况或提高代码的性能。?

将 PHP 与 mySQL 一起使用

4

3 回答 3

5

请参阅此查询希望这将提高我们的代码和速度。

避免在循环中执行 SQL 查询

一个常见的错误是将 SQL 查询放在循环中。这会导致多次往返数据库,并显着降低脚本速度。在下面的示例中,您可以更改循环以构建单个 SQL 查询并一次插入所有用户。

foreach ($userList as $user) {

  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';

  mysql_query($query);

  }

您可以将数据组合到单个数据库查询中,而不是使用循环。

$userData = array();

foreach ($userList as $user) {

    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';

}

$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);

mysql_query($query);
于 2013-08-27T07:40:44.287 回答
2

一次插入多行。看这个例子

INSERT INTO example
  (example_id, name, value, other_value)
VALUES
  (100, 'Name 1', 'Value 1', 'Other 1'),
  (101, 'Name 2', 'Value 2', 'Other 2'),
  (102, 'Name 3', 'Value 3', 'Other 3'),
  (103, 'Name 4', 'Value 4', 'Other 4');

循环通过php生成多行数据并在最后附加多行时发出单个插入

于 2013-08-27T07:38:42.180 回答
1
$sql = '';
foreach($friendsfbid as $key => $value){
   $sql .= INSERT INTO table (fbid, name, birthday) VALUES ('$value[$key]','$friendsname[$key]','$friendsbday[$key]') ON DUPLICATE KEY UPDATE fbid='$value[$key]', name='$friendsname[$key]', birthday='$friendsbday[$key]'";
}
mysql_query($sql);

您可以将 sql INSERT 堆叠成字符串,然后通过调用查询函数一次来运行它们。这应该会加快进程。

于 2013-08-27T07:47:14.060 回答