将MySQL查询放在PHP循环中是不是很糟糕?

joh*_*ack 10 php mysql

我经常在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)

这可能就是你想要的方式.


Jef*_*ber 5

如果您有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)