【问题标题】:PDO 'UPDATE' Statement with parameters does not work [duplicate]带有参数的 PDO 'UPDATE' 语句不起作用 [重复]
【发布时间】:2016-03-17 07:37:14
【问题描述】:

我有这个 PDO 语句不更新我的数据库并且不返回任何错误:

// $database = initialized PDO instance
$status = 'processing';
$submission_id = 213;

$sql  = "UPDATE `submission` 
  SET `status`=':status' 
  WHERE `id`=':submission_id'";

$query = $database->prepare($sql);
$result = $query->execute(array(
  ':status' => $status, 
  ':submission_id' => $submission_id
));

var_dump($result);            // true
var_dump($query->rowCount()); // 0
$database->errorCode();       // 0000
$database->errorInfo();       // [0]=> string(5) "00000" [1]=> NULL [2]=> NULL

如果我从 $sql 中删除参数,它会起作用:

$sql2 = "UPDATE `submission` SET `status`='processing' WHERE `id`='214'";

除了$query->rowCount() 这次返回 1 并更新数据库之外,所有结果都相同。我将相同的 PDO 对象用于其他插入和选择操作,并且效果很好。

为什么第一个参数化查询不起作用?

【问题讨论】:

  • 从你的第一个查询占位符中去掉引号!!
  • 谢谢大家!起初我没有引号,但遇到了一些其他错误,所以我添加了它们以尝试修复它,删除了其他错误,这就是我到达这里的原因。

标签: php mysql pdo sql-update


【解决方案1】:

不要引用参数:

$sql  = "UPDATE `submission` 
  SET `status`=:status 
  WHERE `id`=:submission_id";

【讨论】:

    【解决方案2】:

    停止使用双引号

    $status = 'processing';
    $submission_id = 213;
    
    $sql  = "UPDATE `submission` 
      SET `status`=:status 
      WHERE `id`=:submission_id";
    
    $query = $database->prepare($sql);
    $result = $query->execute(array(
      ':status' => $status, 
      ':submission_id' => $submission_id
    ));
    

    【讨论】:

      【解决方案3】:

      根据PDO statement

      prepared statements 的参数不需要引用;这 驱动程序会自动处理。

      所以在你的查询中使用占位符的引号

      $sql  = "UPDATE `submission` 
      SET `status`=:status
      WHERE `id`=:submission_id";
      

      【讨论】:

        猜你喜欢
        • 2018-01-24
        • 2018-10-05
        • 2013-06-25
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多