在每个环路内部运行准备好的定子



我正在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();
}

相关内容

最新更新