Как обработать ассоциативный массив PHP и внести изменение в БД?

Помогите пожалуйста разобраться не хватает знаний в области PHP.
есть ассоциативный массив такого вида
[{id: "1-2", name: "AN", price: "490", count: 2},
{id: "1-3", name: "AV", price: "350", count: 1},
{id: "11-1", name: "SF", price: "450", count: 1}]
Нужно взяв id из массива вычесть из базы у данного id выбранное количество count пытаюсь сделать следующим образом не могу осилить
function addList($data,$conn) {
    $cart = json_decode($data['cart'], true);
    foreach($cart as $value ) {
        $id = $value['id'];
        $result = mysqli_query($conn,"SELECT `count` FROM `list`  WHERE `id`='$id'");
        $row=mysqli_fetch_row($result);
        $row=(int)$row[0];
        $result=$row-$value['count'];
        if ($result<0){$result=0;};
        mysqli_query($conn,"UPDATE `list` SET `count`='{$result}'  WHERE `id`='$id'");
    }
}
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Я могу предложить такой вариант:
function addList($data, $conn)
{
    $cart = json_decode($data["cart"], true);
    $stmt = $conn->prepare(
        "UPDATE `list` SET `count` = GREATEST(`count` - ?, 0) WHERE `id`= ? ;"
    );

    /* bind parameters for list */
    $stmt->bind_param("ds", $count, $id);

    foreach ($cart as $value) {
        $id = $value["id"];
        $count = $value["count"];

        /* execute query */
        $stmt->execute();
    }
}


Рабочий пример кода: share PHP code

Я использовал в примере mysqli, но в приципе желатель переписать на PDO :)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
учить тут надо SQL, поскольку в РНР все стандартно

$sql = "UPDATE `list` SET `count`=greatest(count-?,0)  WHERE `id`=?";
$stmt = $conn->prepare($sql);
foreach($cart as $value ) {
    $stmt->bind_param("ss", $value['id'], $value['count']);
    $stmt->execute();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы