繁体   English   中英

如何调试PHP PDO准备好的语句没有插入数据

[英]How to debug what PHP PDO prepared statement does not insert data

我有

$salt = md5(mt_rand());
$hashed = hash_hmac('SHA256', $password, $salt);
$stmt = self::$_dbh->prepare('INSERT INTO users (username, password, salt, display, email) VALUES (:username, :password, :salt, :display, :email)');
$stmt->bindParam('username', $username);
$stmt->bindParam('password', $hashed);
$stmt->bindParam('salt', $salt);
$stmt->bindParam('display', $display);
$stmt->bindParam('email', $email);
$stmt->execute();
$firephp->log('Insert OK ');
if ($stmt->rowCount() > 0) {
    return array(
            'status' => 'OK',
            'message' => 'Registration Successful'
    );
} 
$firephp->log('Unknown ... Row count: ' . $stmt->rowCount());
return array(
        'status' => 'failed',
        'message' => 'Something went wrong with the registration ... Please try again ...'
);

我总是收到“注册出现问题...请重试...”。 看起来rowCount是 0。确实,它没有插入数据库。 这是为什么?

尝试:

 $firephp->log(
       $stmt->debugDumpParams()
       . "\n"
       . var_export($stmt->errorInfo());

当有人在主 id 字段上关闭/关闭数据库自动增量时,可能会出现类似的问题。 检查数据库并确保其设置正确。

尝试将冒号放在 bindParam 占位符中,例如代替

$stmt->bindParam('username', $username);

$stmt->bindParam(':username', $username);

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM