在每个循环内部运行预准备语句

时间:2014-09-03 23:53:10

标签: php prepared-statement

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

}

1 个答案:

答案 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();
}