我想从数组中插入数据。以下是一个示例情况。
我抓住朋友列表中的所有朋友(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一起使用
答案 0 :(得分: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);
答案 1 :(得分:2)
一次插入多行。见this example:
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以生成多行数据,并在最后附加多行
发出单个插入答案 2 :(得分: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堆叠到字符串中,然后只调用一次查询函数来运行它们。这应该加快这个过程。