2017-08-08 2 views
-1

Je reçois cette erreur lorsque vous essayez de poster sur mon réseau social construit sur mesure ...:Fatal error: Uncaught PDOException: SQLSTATE [21S01]

PHP Fatal error: Uncaught PDOException: SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 in /home//classes/DB.php:10

Stack trace:
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('test post again', '1', '1')
3 {main}
thrown in /home/progreen/thebirding.space/classes/DB.php on line 10

Ma structure de table ressemble à ceci:

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_id (user_id),

CONSTRAINT posts_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

et la fonction de Post.php ressemble à ceci ...:

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

ce fonctionnait parfaitement bien et les messages est étant entrer ed dans l'amende de base de données jusqu'à ce que j'ajouté la fonction createImgPost qui est ce ...

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

Suis-je manque quelque chose évidente ici les gars? Je suis heureux de fournir plus d'informations et d'exemples de code si nécessaire! Merci beaucoup!

+3

Le nombre de valeurs fournies ne correspond pas au nombre de colonnes de la table. Une des raisons pour lesquelles vous devriez indiquer explicitement au SQL quelles colonnes sont insérées dans, par exemple, 'INSERT INTO \' table \ '(\' column1 \ ', \' column2 \ '...) VALEURS (...)'. –

+1

Simplifiez votre littéral de chaîne de requête en utilisant des guillemets doubles et simples plutôt que d'échapper des guillemets simples comme ceci 'DB :: query (" INSERT INTO poste VALUES ('',: postbody, NOW(),: userid, 0, '') ", array (': postbody' => $ postbody, ': userid' => $ profileUserId));' – RiggsFolly

+0

J'ai essayé ce @RiggsFolly et j'ai encore le même résultat que j'ai peur de dire! –

Répondre

1

Vous devez transmettre la valeur postimg dans la requête d'insertion pour correspondre aux colonnes.