Ne pas utiliser AND
entre vos virgules missions d'utilisation.
$sql = "INSERT post
SET timeDate = :timeDate,
name = :name,
mail = :mail,
comment = :comment,
website = :website";
Votre déclaration en utilisant AND
entre les termes est aucune erreur, car l'instruction est en fait valable. Cela ne fait tout simplement pas ce que vous pensiez.
Il est comme si vous l'avez fait:
SET timeDate = (:timeDate and name = :name and mail = :mail and comment = :comment and website = :website")
Ceci définit uniquement timedate le résultat d'une longue expression booléenne.
Les autres colonnes ne reçoivent pas rien affectées, ils sont juste être comparées aux valeurs paramétrées. Comme il s'agit d'une nouvelle ligne que vous n'avez pas encore insérée, toutes les autres colonnes sont naturellement NULL, donc les comparaisons seront NULL. Par conséquent, AND
- les ensemble sera NULL, et c'est la valeur ultime qui sera affectée à votre colonne timeDate
.
Les autres colonnes n'ont aucune valeur dans cette instruction et leur valeur par défaut est vraisemblablement NULL.
Ceci est une déclaration bizarre et inutile, mais à proprement parler, ce n'est pas une erreur.
Je vous encourage aussi à utiliser PDO plus simplement. Au lieu d'utiliser bindParam()
pour tout, vous pouvez passer un tableau à execute()
. Cela fait la même chose que si vous aviez fait bindValue()
pour chacun des paramètres. Vous pouvez le faire avec des paramètres nommés ou des paramètres de position.
$stmt = $db->prepare($sql);
$stmt->execute([
"timeDate" => $date,
"name" => $name,
"mail" => $mail,
"comment" => $comment,
"website" => $website]);
Ceci est particulièrement utile si vous avez déjà vos valeurs de paramètres stockées dans un tableau. La protection contre l'injection SQL est tout aussi bonne que l'utilisation bindParam()
.
Vous devez d'abord apprendre ** la syntaxe SQL de base **. https://dev.mysql.com/doc/refman/5.7/en/update.html –
Sur une note de côté, vous ne avez pas réellement besoin d'un tel code long et sinueux, deux lignes sont en fait assez: [Exemples AOP: UPDATE requête en utilisant PDO] (https://phpdelusions.net/pdo_examples/update) –
'$ sql =" INSERT post SET nom = ?, mail =? ";' '$ db-> préparer ($ sql) -> execute ([$ name, $ mail]); 'Mais cette injection est-elle sûre? – Fig