2011-11-27 83 views
0

我很困惑我在這裏做錯了什麼。mySQL PDO錯誤

我PDO聲明

$sql = "INSERT INTO my_tb (stud_user, stud,pass, stud_salt) VALUES (:username, :password, :salt)"; 
$stmt = $db->prepare($sql); 
$stmt->execute(array(':username' => $student_username,':password' => $student_password,':salt' => $student_salt)); 

我的DB模式

CREATE TABLE IF NOT EXISTS `my_tb` (
`stud_id` int(11) NOT NULL AUTO_INCREMENT, 
`stud_user` varchar(50) NOT NULL, 
`stud_pass` varchar(50) NOT NULL, 
`stud_salt` varchar(50) NOT NULL, 
PRIMARY KEY (`stud_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

我將確保它有值之前呼應三個瓦爾。每當我執行此,我總是在這個錯誤結束:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1' in C:\Apache\htdocs\path\to\file.php:47 Stack trace: #0 C:\Apache\htdocs\path\to\file.php(47): PDOStatement->execute(Array) #1 {main} thrown in C:\Apache\htdocs\path\to\file.php on line 47

回答

5

你有「釘」在INSERT語句中的「通行證」之間的逗號 - 它應該是

INSERT INTO my_tb (stud_user, stud_pass, stud_salt) VALUES (:username, :password, :salt)"; 
+0

我的壞。我甚至沒有注意到這個逗號。巨大的感謝@TheOx。 –

4

而且,你可能希望將您的PDO語句包含在try/catch塊中以獲取有關所拋出錯誤的更多詳細信息。

喜歡的東西:

try { 
    // PDO statements 
} 
catch(PDOException $e) { 
    // handle error 
    echo $e->getmessage(); 
    exit(); 
} 
+0

感謝您的額外建議。 –