致命错误:未捕获PDOException:SQLSTATE [21S01]

时间:2017-08-08 08:49:51

标签: php mysql phpmyadmin prepared-statement

我在尝试发布自定义社交网络时收到此错误...:

  

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),
KEY user_iduser_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!');
    }
  }

我在这里错过了一些显而易见的东西吗?如果需要,我很乐意提供更多信息和代码示例!非常感谢!

1 个答案:

答案 0 :(得分:1)

您需要在插入查询中传递postimg值以匹配列。