2010-04-28 60 views
4

我不确定这是否可能。如果没有,请告诉我。使用条件更新查询?

我有一个PDO MySQL更新3个字段。

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

但我想field3进行更新,只有当$update3 = true;(意味着的field3更新是通过条件语句控制)

这是可能实现与单个查询?

我可以做2个查询,我更新field1field2,然后检查布尔值并在需要时更新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

你能说清楚,你的意思是field3,而不是update3?如果是这样,你的意思是你提供的新价值是真的还是现有的价值? – JAL 2010-04-28 03:14:19

+0

'update3'是一个布尔值,'$ update3 = true;'是帮助我决定是否真的要更新field3 =:field3'的条件。我会更新这个问题以使其更清楚。 – dmontain 2010-04-28 03:29:10

回答

5

你不需要做多个查询。你为什么不根据那个条件构造你的查询字符串,然后把它传递给你的数据库adapater执行?它可能如下:

$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(); 
+1

感谢falomir。那样做了。 – dmontain 2010-04-30 20:40:46