Объедините несколько операторов вставки foreSQL MySQL в один с данными массива PHP - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть массив PHP с различными элементами и их соответствующими значениями, и мне нужно обновить каждую строку для каждого элемента в базе данных.Можно ли выполнить только один запрос вместо нескольких запросов foreach?

foreach($array as $key=>$item){
    $image_id = $item['id'];
    $order_id = $item['order_id'];
    $sql = "UPDATE images SET order_id='$order_id' WHERE id='$image_id'";
    $query = mysqli_query($connection, $sql);
} // end for each

1 Ответ

0 голосов
/ 28 февраля 2019

Вы не можете действительно объединить его в один запрос, используя UPDATE, так как значение и условие входят в пары (значение и условие различны для каждой обновляемой строки).

Существует хакерское исправление с INSERT INTO..ON DUPLICATE KEY UPDATE, но я бы воздержался от его использования - см. Вопрос , связанный с RiggsFolly в комментариях .

При использовании подготовленногооператора, вы можете выполнить один и тот же запрос несколько раз (в любом случае вам придется выполнять запрос несколько раз, даже с mysqli_query(), но это оптимизировано и более безопасно при использовании подготовленного оператора).

$sql = "UPDATE images SET order_id=? WHERE id=?";
$stmt = $connection->prepare($sql);
foreach($array as $key=>$item){
    $stmt->bind_param("ss", $item['order_id'], $item['id']);
    $stmt->execute();
}
$stmt->close();

Если ваши идентификаторы являются целыми числами, а не строками, замените соответствующие s на i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...