Bonjour,

J'ai un problème pour l'insertion alors que le nombre de champs dans ma requête correspond bien au nombre de champs dans ma table: id, nom, email, telephone, adresse, ville cp, ddeConcerne, fonctionnalites et message.

Ma requête:

$sql = 'INSERT INTO devis_clients VALUES  (?,?,?,?,?,?,?,?,?,?)';
if ($stmt = $mysqli->prepare($sql)) {
    $stmt->bind_param('sssssssss', $nom, $email, $telephone, $adresse, $ville, $cp, $ddeConcerne, $fonctionnalites, $message);
    $stmt->execute();
} else {
    $error = $mysqli->errno.' '.$mysqli->error;
    echo $error;
}

J'obtiens l'erreur: 1136 Column count doesn't match value count at row 1

Je vous remecie de votre aide

8 réponses


Bonjour,
Une relecture de la doc de "bind_param" s'impose,
il faut autant de "s" que de "?"

code actualisé ?

barpoi78
Auteur

merci j'ai donc lu la documentation et ajouté autant de paramètres "s" qu'il e faut et malgré tout j'ai toujours la même erreur.

et donc le nouveau code est ?

barpoi78
Auteur

$sql = 'INSERT INTO devis_clients VALUES (?,?,?,?,?,?,?,?,?,?)';
if ($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param('sssssssss', $nom, $email, $telephone, $adresse, $ville, $cp, $ddeConcerne, $fonctionnalites, $message);
$stmt->execute();
} else {
$error = $mysqli->errno.' '.$mysqli->error;
echo $error;
}

compte le nombre de "?", compte le nombre de "s" et compte le nombre de paramètre dans bin_param....
je vois de vois que tu as éditer ton 1er message, ce n'est pas sympa car du coup, on ne connais pas le code d'origine et on perds le fil de la conversation

barpoi78
Auteur

Je viens de l'éditer car je ne savais pas comment faire et j'ai juste ajouté les"s" manquants car il n'y en n'avait qu'un mais là je suis sur mon pc et c'est plus pratique donc j'ai aussi enlevé un "?" donc 9 "s" et 9 "?"

$sql = 'INSERT INTO devis_clients VALUES (?,?,?,?,?,?,?,?,?)';
if ($stmt = $mysqli->prepare($sql)) {
$stmt->bind_param('sssssssss', $nom, $email, $telephone, $adresse, $ville, $cp, $ddeConcerne, $fonctionnalites, $message);
$stmt->execute();
} else {
$error = $mysqli->errno.' '.$mysqli->error;
echo $error;
}

et toujours la même erreur

j'en compte 10 de "?" dans le 1er code
$stmt->execute(); retourne true en cas de succès et false en cas d'achec, qu'elle retour obtiens-tu ?
Si false alors là il faur lire la valeur de https://www.php.net/manual/fr/mysqli-stmt.error.php