目前,我必须更新一些如下所示的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}}
答案 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();
沿着这些方向发展。