Page 1 sur 1

SQL error

Posté : 30 juil. 2019, 20:07
par CuriousStudent
Bonjour,
Voilà maintenant deux jours que je rencontre un problème qui pourrait bien avoir raison de ma santé mentale.
J'ai construit une fonction permettant d'ajouter des commentaires sur un 'blog' de chat.

Voici la fonction (model)

Code : Tout sélectionner

function writeComments($postId,$pseudonyme,$comment) { $db = dbConnect(); $req = $db ->prepare('INSERT INTO Comments (author,comment,id_post,date_content) VALUES (?,?,?,NOW()'); $req ->execute(array($pseudonyme,$comment,$postId)); }
Voici la fonction de contrôle()

Code : Tout sélectionner

function writeoncomments() { $pseudonyme = $_POST['pseudo']; $comment = $_POST['comment']; $postId = $_GET['id']; writeComments($postId,$pseudonyme,$comment); require('/opt/lampp/htdocs/workphp/MCVact/view-1.php'); }


voici la fonction(routeur)

Code : Tout sélectionner

elseif ($_GET['action'] == 'post') { if (isset($_POST['comment']) AND isset($_POST['pseudo'])) { if (($_POST['comment'] && $_POST['pseudo']) > 0) { writeoncomments(); } } }
le serveur me renvoi

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 in /opt/lampp/htdocs/workphp/MCVact/models/model.php:48 Stack trace: #0 /opt/lampp/htdocs/workphp/MCVact/models/model.php(48): PDOStatement->execute(Array) #1 /opt/lampp/htdocs/workphp/MCVact/controllers/control.php(20): writeComments('2', 'SAlut', 'sa toi ') #2 /opt/lampp/htdocs/workphp/MCVact/rooter.php(25): writeoncomments() #3 {main} thrown in /opt/lampp/htdocs/workphp/MCVact/models/model.php on line 48

J'avoue ne pas comprendre d'ou vient l'erreur,
Merci d'avance pour votre aide précieuse.

Re: SQL error

Posté : 30 juil. 2019, 20:54
par yann18
bonjour,

il t'insère tout sauf la date. Ce qui laisse supposer que la colonne date_content n'est pas de type DATETIME ou DATE.

Posté : 30 juil. 2019, 20:57
par CuriousStudent
Merci beaucoup pour ta réponse !
PAr contre je ne suis pas certain de comprendre, la fonction NOW() devrait pourtant bien insérer la date ?
D'aillerus qu'es qui t'as mit sur la piste ?

Re: SQL error

Posté : 30 juil. 2019, 21:00
par CuriousStudent
PS: la colonne est bien de type datetime

Re: SQL error

Posté : 30 juil. 2019, 21:37
par yann18
Cette erreur est typique soit d'un mauvais type(ce qui est maintenant exclu) soit d'un mot réservé MYSQL soit d'une toute autre erreur de syntaxe ce qui loin d'être vrai au vu de ta requête.
Il se trouve que comment est un mot réservé MYSQL.L'utilisé peut poser problème. essaie de l’entourer des quotes inversés(`)

Code : Tout sélectionner

'INSERT INTO Comments (author, `comment`,id_post,date_content) VALUES (?,?,?,NOW()'
Lien pour les mots réservés: https://dev.mysql.com/doc/refman/8.0/en/keywords.html

si ça ne passe pas tu peux exécuter la requête dans phpmyadmin.

Re: SQL error

Posté : 31 juil. 2019, 10:52
par yann18
il manque une parenthèse fermante à la requête.
Remplace la ligne suivante:

Code : Tout sélectionner

$req = $db ->prepare('INSERT INTO Comments (author,comment,id_post,date_content) VALUES (?,?,?,NOW()');
par

Code : Tout sélectionner

$req = $db ->prepare('INSERT INTO Comments (author,`comment`,id_post,date_content) VALUES (?,?,?,NOW() )' );
comment reste tout de même un mot clé réservé qu'il faut absolument entourés de quotes inversés