我在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();
}
答案 0 :(得分:1)
您应该只在循环之前准备一次查询 - 然后使用不同的参数集执行它。除了防止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();
}