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

Но оно вообще не работает) Возможно подскажите как нечто подобное сделать правильно?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@galaxy
Возможно, просто prepare() нужно делать после формирования строки $sql.
Поскольку вы выполняете все в цикле, нужно сохранять оригинальную строку $sql, а то вы к ней цепляете все больше и больше WHERE...

Другое дело, что вы несколько убиваете смысл подготовленных запросов таким образом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fockker
@Fockker Куратор тега 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. Но по этому коду очень сложно понять, что на самом деле нужно
Ответ написан
Ваш ответ на вопрос

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

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