Задать вопрос
@kolomat

Возможно ли сделать конкатенацию к подготовленому sql запросу?

Добрый день, подскажите по такому вопросу, есть запрос на обновление.
$sql = 'UPDATE product SET quantity = ?';
$stmt = $db->prepare($sql);

Возможно ли в зависимимоти от условий добавлять к нему другие параметры
Пробовал приблизительно так
foreach ($stocks as $key => $value) {
            if ($value[6] == 0 && $value[5] == 0) {
                $qty = 0;
                $sql .= " WHERE model = '". $key ."'";
                $stmt->bind_param("s", $qty);
                $stmt->execute();

            } elseif ($value[6] > 0) {
                $qty = $value[6];
                $status = 2;
                $sql .= " ,status = '". $status ."' WHERE model = '". $key ."'";
                $stmt->bind_param("s", $qty);
                $stmt->execute();
            }
        }

Но оно вообще не работает) Возможно подскажите как нечто подобное сделать правильно?
  • Вопрос задан
  • 100 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@galaxy
Возможно, просто prepare() нужно делать после формирования строки $sql.
Поскольку вы выполняете все в цикле, нужно сохранять оригинальную строку $sql, а то вы к ней цепляете все больше и больше WHERE...

Другое дело, что вы несколько убиваете смысл подготовленных запросов таким образом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Возможно, но как правильно написал galaxy, prepare() нужно делать после формирования строки $sql, а не до.
В общем случае это делается так:
$sql = 'UPDATE product SET quantity = ?';
$parameters[] = $quantity;
if (....) {
    $sql .= 'AND name = ?';
    $parameters[] = $name;
}
$stmt = $db->prepare($sql);
$stmt->bind_param(str_repeat("s", count($prameters)), ...$parameters);


Но в вашем случае вы делаете что-то странное, там явно нужен скорее оператор IN. Но по этому коду очень сложно понять, что на самом деле нужно
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽