我经常在PHP中使用大型数组或大量动态数据来运行MySQL查询来处理.
有没有更好的方法来运行许多进程,如INSERT或UPDATE而不循环通过INSERT-ed或UPDATE-ed信息?
示例(为了简洁起见,我没有使用准备好的声明):
$myArray = array('apple','orange','grape');
foreach($myArray as $arrayFruit) {
$query = "INSERT INTO `Fruits` (`FruitName`) VALUES ('" . $arrayFruit . "')";
mysql_query($query, $connection);
}
jer*_*ear 20
选项1您实际上可以一次运行多个查询.
$queries = '';
foreach(){
$queries .= "INSERT....;"; //notice the semi colon
}
mysql_query($queries, $connection);
Run Code Online (Sandbox Code Playgroud)
这样可以节省您的处理费用.
方案2
如果您的插入对于同一个表来说很简单,那么您可以在一个查询中执行多个插入
$fruits = "('".implode("'), ('", $fruitsArray)."')";
mysql_query("INSERT INTO Fruits (Fruit) VALUES $fruits", $connection);
Run Code Online (Sandbox Code Playgroud)
查询最终看起来像这样:
$query = "INSERT INTO Fruits (Fruit)
VALUES
('Apple'),
('Pear'),
('Banana')";
Run Code Online (Sandbox Code Playgroud)
这可能就是你想要的方式.
如果您有mysqli类,则可以使用预准备语句迭代值以插入.
$sth = $dbh->prepare("INSERT INTO Fruits (Fruit) VALUES (?)");
foreach($fruits as $fruit)
{
$sth->reset(); // make sure we are fresh from the previous iteration
$sth->bind_param('s', $fruit); // bind one or more variables to the query
$sth->execute(); // execute the query
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5595 次 |
| 最近记录: |