我不确定这是否可行。如果没有,请告诉我。
我有一个更新3个字段的PDO mysql。
$update = $mypdo->prepare("UPDATE tablename SET field1=:field1,
field2=:field2,
field3=:field3
WHERE key=:key");
但我希望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");
}
但希望有一种方法可以在1个查询中完成此任务吗?
答案 0 :(得分: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();