【问题标题】:empty value after mysql update phpmysql更新php后的空值
【发布时间】:2014-12-17 03:15:54
【问题描述】:

我在这里和谷歌做了很多研究,但我找不到这个问题的答案。

我使用以下代码更新 MySQL 数据库中的字段:

public function registerPubKey() {
    
    $stmt = $this->cn->prepare('UPDATE sb_user SET pubkey= ? WHERE email= ?');
    $exres = $stmt->execute(array($this->info["pubkey"], $this->info["email"]));

    if ($exres == false) {
        $resultArray["result"] = "Error registering public key";
        echo json_encode($resultArray);
        exit;
    }
    
    $resultArray["result"] = "success";
    echo json_encode($resultArray);
}

我确信除了数据库中的字段为空之外,一切正常。我转储了私有变量 $info,它包含了 pubkey(pubkey 是一个 base64 字符串)。

我注意到,如果我使用 INSERT 更改更新查询,则值会正确插入!

【问题讨论】:

    标签: php mysql insert-update is-empty


    【解决方案1】:

    这可能是因为您尝试UPDATE 不存在的行。尝试在之前添加ON DUPLICATE KEY。见INSERT ... ON DUPLICATE KEY UPDATE Syntax。如果行不存在,UPDATE 不返回任何内容。

    【讨论】:

    • 非常感谢您的回答。我会检查并通知你
    • 天哪……我有点智障 xD 我在 WHERE 条件下传递了错误的值。帕克回答中的It's likely because you're trying to UPDATE non existent rows. 是解决方案。再次感谢您。
    【解决方案2】:

    我遇到了类似的问题并验证了这一点:

    • 该行存在,并且
    • execute 参数有效且正确

    PDO::errorInfo() 函数可以深入了解导致更新失败的实际情况:

    if (! $stmt->execute($params) ) {
        $resultArray["result"] = print_r($stmt->errorInfo(), true);
    }
    

    就我而言,我收到了消息The user specified as a definer ('user'@'172.20.%.%') does not exist。由于这是恢复到不同子网的数据库快照,因此错误消息是有意义的,并且用户实际上不存在。

    【讨论】:

      猜你喜欢
      • 2012-12-21
      • 2013-03-09
      • 2013-12-14
      • 1970-01-01
      • 2012-02-15
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多