我在尝试发布自定义社交网络时收到此错误...:
PHP致命错误:未捕获PDOException:SQLSTATE [21S01]:插入值 列表与列表列表不匹配:1136列数不匹配 /home//classes/DB.php:10
中第1行的值计数堆栈跟踪:
0 /home//classes/DB.php(10): PDOStatement-> execute(Array)
1 /home//classes/Post.php(13): DB :: query('INSERT INTO pos ...',Array)
2 /home//profile.php(56): Post :: createPost('再次测试帖子','1','1')3 {main}
抛出 在第10行的/home/progreen/thebirding.space/classes/DB.php
我的表格结构如下:
CREATE TABLE
posts
(
id
int(11)unsigned NOT NULL AUTO_INCREMENT,
body
varchar(160)NOT NULL DEFAULT'',
posted_at
datetime NOT NULL,
user_id
int(11)unsigned NOT NULL,
likes
int(11)unsigned NOT NULL,
postimg
varchar(255)DEFAULT NULL,
topics
varchar(400)DEFAULT NULL,
PRIMARY KEY(id
),
KEYuser_id
(user_id
),
约束posts_ibfk_1
外键(user_id
)参考users
(id
)
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
Post.php的功能看起来像这样......:
public static function createPost($postbody, $loggedInUserId, $profileUserId) {
if (strlen($postbody) > 220 || strlen($postbody) < 1) {
die('Incorrect length!');
}
if ($loggedInUserId == $profileUserId) {
DB::query('INSERT INTO posts VALUES (\'\', :postbody, NOW(), :userid, 0, \'\')', array(':postbody'=>$postbody, ':userid'=>$profileUserId));
} else {
die('Incorrect user!');
}
}
这工作得非常好,帖子正在输入数据库,直到我添加了createImgPost函数,这就是...
public static function createImgPost($postbody, $loggedInUserId, $profileUserId) {
if (strlen($postbody) > 220) {
die('Incorrect length!');
}
if ($loggedInUserId == $profileUserId) {
DB::query('INSERT INTO posts VALUES (\'\', :postbody, NOW(), :userid, 0, \'\')', array(':postbody'=>$postbody, ':userid'=>$profileUserId));
$postid = DB::query('SELECT id FROM posts WHERE user_id=:userid ORDER BY ID DESC LIMIT 1;', array(':userid'=>$loggedInUserId))[0]['id'];
return $postid;
} else {
die('Incorrect user!');
}
}
我在这里错过了一些显而易见的东西吗?如果需要,我很乐意提供更多信息和代码示例!非常感谢!
答案 0 :(得分:1)
您需要在插入查询中传递postimg值以匹配列。