Как передать динамический параметр в запрос?

Вот мой код:

$param2 = $val2 = "";
if ($myCondition){
$parm2 = ", param2 = ?";
$val2 = "something";
}

$stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? $param2 WHERE param3 = ?");
$stmt->execute([$val1, $val2, $val3]);

Мой код работает, когда это условие true, Как я могу справиться с этим, когда это false ?

1

Решение

Вот код для начала:

$params = ['param1 = ?'];
$values = [$param1];
if ($myCondition){
$params[] = 'param2 = ?'
$values = [$param2];
}
$values[] = $param3;

$stmt = $dbh_conn->prepare("UPDATE myTable SET " . implode(', ', $params)  . " WHERE param3 = ?");
$stmt->execute($values);

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

1

Другие решения

$param2 = $val2 = "";
if ($myCondition){
$parm2 = ", param2 = ?";
$val2 = "something";
$stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? $param2 WHERE param3 = ?");
$stmt->execute([$val1, $val2, $val3]);
} else {
$stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? WHERE param3 = ?");
$stmt->execute([$val1, $val3]);
}
3

Более простой способ:

if ($myCondition){
$stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ?, param2 = ? WHERE param3 = ?");
$stmt->execute([$val1, "something", $val3]);
} else {
$stmt = $dbh_conn->prepare("UPDATE myTable SET param1 = ? WHERE param3 = ?");
$stmt->execute([$val1, $val3]);
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector