Warning: PDO::exec(): SQLSTATE[42000]: Syntax error or access violation: 1

Diantre

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je suis confronté à un problème étrange concernant ma requête SQL. Malgré une syntaxe identique à ce que j'ai pu trouvé sur le web, et une recherche dans les tréfonds de l'Internet, mon naviguateur au lieu de m'afficher une page suave et pleine de goût me renvoie un tableau orange moche intitulé: Warning: PDO::exec(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index(data) VALUES('user')' at line 1 in gnagnagna\registrationScript.php on line 11.

La table index a deux colonnes: id(int) et data(text). Le but du fichier php est de créer une nouvelle entrée dans la table avec une incrémentation automatique pour l'id et "user" comme data.

1
2
3
4
5
6
7
8
9
<h1>Bla bla bla</h1>

<?php
require("connectToBdd.php");

$user="user";
$requete = "INSERT INTO index(data) VALUES('$user')";
$bdd->exec($requete);
?>

Ave connectToBdd.php:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
try
    {
    $bdd = new PDO('mysql:host=localhost;dbname=justicebelongstous;charset=utf8', 'root', '');
    }
catch (Exception $e)
    {
    die('Erreur : ' . $e->getMessage());
    }
    $bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
?>

Merci de votre aide! :)

+0 -1
Staff

Cette réponse a aidé l'auteur du sujet

index c'est un mot clef du langage SQL donc si tu as une table qui s'appelle index, il faut que tu l'entoure d'antiapostrophe, comme ceci :

1
2
3
4
5
6
<?php
require("connectToBdd.php");

$user="user";
$requete = "INSERT INTO `index`(data) VALUES('$user')";
$bdd->exec($requete);

On ajoutera que dans la grande majorité des cas, il est préférable d'utiliser les requêtes préparées afin de les sécuriser, ce qui donnerait ceci :

1
2
3
4
5
6
7
<?php
require("connectToBdd.php");

$user="user";
$requete = "INSERT INTO index(data) VALUES(:user)"; // on dit qu'on va insérer des choses et qu'on placera les données à tel ou tel endroit
$prepared = $bdd->prepare($requete); // on fait le lien avec le serveur
$prepared->execute(["user"=>$user]);//exécute la requête en métant la valeur de $user à l'endroit où il y a ":user"

Voilou.

+3 -0
Staff

Oui, je n'utilise pas les requêtes préparés pour l'instant vu que je suis encore aux prémisses du site mais je compte les ajouter par la suite!

Je te le déconseille. On n'arrive jamais à tout remplacer. Il vaut mieux faire ça bien tout de suite. c'est 100 fois plus facile après.

PS : n'hésite pas à marquer le sujet comme résolu.

Édité par artragis

+2 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte