2011-06-03 43 views
0

如何調試PHP什麼準備PDO語句沒有插入數據

$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.真的夠了,它不會插入到數據庫中。這是爲什麼?

+0

我錯過了'else'。最後的'$ firephp-> log'調用始終(無條件地)執行。沒關係,誤解它。 – 2011-06-03 10:35:56

回答

3

嘗試:

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

儘量把冒號在bindParam佔位符,等代替

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

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

希望它能幫助!

+0

這是一個冒號,而不是分號。 – cwallenpoole 2011-06-03 11:26:06

+0

大聲笑,很抱歉...修正了它:) – Maverick 2011-06-03 11:28:57

0

當某人在主ID字段上關閉數據庫自動增量時會出現類似問題。檢查數據庫並確保它的設置正確。