我正在foreach循环中处理以下准备好的语句。我听说过在循环中运行查询的糟糕做法。但这是我能想到的运行查询的最佳方式。
你们有什么建议可以帮助我吗?下面是我的代码。提前感谢
$menu_items_and_prices = isset($_POST['items_and_prices']) ? $_POST['items_and_prices'] : NULL;
foreach($items_and_prices as $id => $item_and_price){
$item = $item_and_price[0];
$price = $item_and_price[1];
$query = "UPDATE items SET item_name = ? , item_price = ? WHERE id = ? ";
$stmt = $db->prepare($query);
$stmt->bind_param("sii",$item, $price,$id);
$stmt->execute();
}
您应该在循环之前只准备一次查询,然后使用不同的参数集执行它。除了防止SQL注入之外,这是准备语句的主要设计目标。
像这样:
$query = "UPDATE items SET item_name = ? , item_price = ? WHERE id = ? ";
$stmt = $db->prepare($query);
foreach($items_and_prices as $id => $item_and_price){
$item = $item_and_price[0];
$price = $item_and_price[1];
$stmt->bind_param("sii", $item, $price, $id);
$stmt->execute();
// Following the comments of @cdhowie you might add
// the following line:
$stmt->closeCursor();
}