带PDO的条件更新列

时间:2014-09-12 20:38:29

标签: php sql pdo

目前,我必须更新一些如下所示的SQL:

$varb = "";
if ($something) {
    $varb = ", colb='abc'";
}
mysql_query("update foo set cola='$vara'$varb where id='$id'");

请注意colb如何根据$something有条件地更新$varb。我必须更新它以使用PDO,但我无法复制colb部分。有什么想法吗?

编辑:这是PDO的样子,但请注意$st = $db->prepare("update foo set cola=:vara, colb='abc' where id=:id") 没有像原来那样有条件地更新:

{{1}}

2 个答案:

答案 0 :(得分:2)

另一种方法是在查询中执行决策逻辑。

UPDATE ...
SET cola = :vara,
   colb = IF(:something, :varb, colb)

如果:something的计算结果为false,则执行相当于SET colb = colb的操作,这实际上是一个空操作。它的效率有点低,因为你必须向数据库发送一些东西,但它具有简化查询构造的优势。

答案 1 :(得分:1)

if ($something) {
    $foo = 'bar';
} else {
    $foo = null;
}

$stmt = $db->prepare(sprintf(
    'UPDATE foo
        SET cola = :vara %s
      WHERE id = :id',
    $foo ? ', colb = :varb' : null
));

$stmt->bindValue(':vara', ...);
if ($foo) {
    $stmt->bindValue(':varb', $foo);
}
$stmt->execute();

沿着这些方向发展。