Php 致命错误:未捕获的PDO异常:SQLSTATE[21S01]
我试图在自定义的社交网络上发布时遇到此错误…: PHP致命错误:未捕获PDOException:SQLSTATE[21S01]:插入值 列表与列列表不匹配:1136列计数不匹配 /home//classes/DB.php中第1行的值计数:10 堆栈跟踪:Php 致命错误:未捕获的PDO异常:SQLSTATE[21S01],php,mysql,phpmyadmin,prepared-statement,Php,Mysql,Phpmyadmin,Prepared Statement,我试图在自定义的社交网络上发布时遇到此错误…: PHP致命错误:未捕获PDOException:SQLSTATE[21S01]:插入值 列表与列列表不匹配:1136列计数不匹配 /home//classes/DB.php中第1行的值计数:10 堆栈跟踪:0/home//classes/DB.php(10): PDOStatement->execute(Array)1/home//classes/Post.php(13): DB::query('INSERT INTO pos..,Array)2/
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('再次测试Post','1','1')
3{main}
在第10行的/home/progreen/thebirding.space/classes/DB.php中 我的表结构如下所示: 创建表
posts
(id
int(11)无符号非空
自动递增,body
varchar(160)非空默认值“”,datetime非空时发布,
user\u id
int(11)未签名
NULL,
喜欢int(11)unsigned NOT NULL,
postimg
varchar(255)默认值为空,
主题
varchar(400)默认值
空,
主键(id
),
键用户id
(用户id
),
约束posts\u ibfk\u 1
外键(user\u id
)引用users
(id
)
)引擎=InnoDB默认字符集=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!');
}
}
我是不是错过了一些明显的东西?如果需要,我很乐意提供更多的信息和代码示例!非常感谢 您需要在insert查询中传递postimg值以匹配列。提供的值数量与表中的列数量不匹配。您应该明确告诉SQL要插入哪些列的原因之一,例如,INSERT-into`table`(`column1`、`column2`……)值(…)
。使用双引号和单引号简化查询字符串文字,而不是像这样转义单引号DB::query(“INSERT-into-posts-VALUES”)(“”,:postbody,NOW(),:userid,0,,)”,数组(“:postbody'=>$postbody,:userid'=>$profileUserId))
我尝试过@RiggsFolly,但仍然得到了相同的结果,我恐怕要说!Phillip,这不是解决您问题的方法,只是一个让您的代码更容易阅读/维护的建议。啊,伙计们,是的,它确实让您的代码更容易阅读!
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!');
}
}