2011-11-27 85 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

感谢您的额外建议。 –