用条件更新查询?

dmo*_*ain 4 php mysql database pdo

我不确定这是否可能.如果没有,请告诉我.

我有一个更新3个字段的PDO mysql.

$update = $mypdo->prepare("UPDATE tablename SET field1=:field1, 
                                                field2=:field2, 
                                                field3=:field3 
                                            WHERE key=:key");
Run Code Online (Sandbox Code Playgroud)

但我只想field3更新$update3 = true;(意味着更新field3由条件语句控制)

这可以通过单个查询完成吗?

我可以用我更新的2个查询来做field1,field2然后检查布尔值,field3如果需要在单独的查询中更新.

//run this query to update only fields 1 and 2
$update_part1 = $mypdo->prepare("UPDATE tablename SET field1=:field1, 
                                                      field2=:field2
                                                  WHERE key=:key");

//if field3 should be update, run a separate query to update it separately
if ($update3){
  $update_part2 = $mypdo->prepare("UPDATE tablename SET field3=:field3 
                                                    WHERE key=:key");
}
Run Code Online (Sandbox Code Playgroud)

但希望有一种方法可以在1个查询中完成此操作?

fal*_*mir 5

您不需要执行多个查询.为什么不根据该条件构建查询字符串,然后将其传递给DB适配器执行?它可以如下:

    $pdo = new PDO($dsn, $user, $password);

    $sql = "UPDATE table SET columnname1=:field1, columname2=:field2";

    if ( $update ) $sql .= ",columname3=:field3";

    $sql .= " WHERE key=:key";

    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(":key", $key, PDO::PARAM_INT);
    $stmt->bindParam(":field1", $field1, PDO::PARAM_STR);
    $stmt->bindParam(":field2", $field2, PDO::PARAM_STR);

    if($update) $stmt->bindParam(":field3", $field3, PDO::PARAM_STR);

    $stmt->execute();
Run Code Online (Sandbox Code Playgroud)