Martin AJ
Martin AJ

Reputation: 6697

How to pass dynamic parameter to the query?

Here is my code:

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

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

My code works when that condition is true. How can I handle that when that's false ?

Upvotes: 1

Views: 141

Answers (3)

Priyanka Maurya
Priyanka Maurya

Reputation: 385

$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]);
}

Upvotes: 3

Martin AJ
Martin AJ

Reputation: 6697

The easier way is:

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]);
}

Upvotes: 0

u_mulder
u_mulder

Reputation: 54831

Here's a code to start:

$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);

You can modify it as you want, but the main idea is to gather all values that will be updated in array and then implode this array to a string.

Upvotes: 1

Related Questions