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

Но оно вообще не работает) Возможно подскажите как нечто подобное сделать правильно?
  • Вопрос задан
  • 92 просмотра
Решения вопроса 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. Но по этому коду очень сложно понять, что на самом деле нужно
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы