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
),
KEYuser_id
(user_id
),
CONSTRAINTposts_ibfk_1
FOREIGN KEY (user_id
) REFERENCESusers
(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!
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 (...)'. –
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
J'ai essayé ce @RiggsFolly et j'ai encore le même résultat que j'ai peur de dire! –