Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 致命错误:未捕获的PDO异常:SQLSTATE[21S01]_Php_Mysql_Phpmyadmin_Prepared Statement - Fatal编程技术网

Php 致命错误:未捕获的PDO异常:SQLSTATE[21S01]

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/

我试图在自定义的社交网络上发布时遇到此错误…:

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/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!');
    }
  }