【问题标题】:Update query with conditional?用条件更新查询?
【发布时间】:2011-02-13 04:05:51
【问题描述】:

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

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

$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 个查询中完成此任务?

【问题讨论】:

  • 你能澄清一下,你的意思是field3,而不是update3吗?如果是这样,您是指您提供的新值是 true 还是现有值?
  • update3 是一个布尔值,$update3=true; 是帮助我决定是否真的要更新field3=:field3 的条件。我将更新问题以使其更清楚。

标签: php database mysql pdo


【解决方案1】:

您不需要执行多个查询。您为什么不根据该条件构造查询字符串,然后将其传递给您的数据库适配器执行?可能是这样的:

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

【讨论】:

    猜你喜欢
    • 2012-07-13
    • 2011-07-12
    • 2016-08-14
    • 2015-06-02
    • 2017-10-23
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多