Je viens vers vous pour un problème qui revient sans cesse mais ça fait 2 jours que j'essai de le résoudre et je vois pas où se trouve mon erreur...
Le message d'erreur :
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de ''presentation' WHERE pres_id = '3'' à la ligne 1 in C:\wamp64\www\ASM-new\modification.php:28 Stack trace: #0 C:\wamp64\www\ASM-new\modification.php(28): PDOStatement->execute(Array) #1 {main} thrown in C:\wamp64\www\ASM-new\modification.php on line 28
Mon code en question :
$req = $bdd->prepare('SELECT * FROM ? WHERE pres_id = ?');
$req->execute(array($_GET['table'], $_GET['modif']));
while ($donnees = $req->fetch())
{
$titre=$donnees['pres_titre'];
$contenu=$donnees['pres_contenu'];
$id=$donnees['pres_id'];
}
La ligne 28 correspond à la partie : $req->execute
Le plus simple est de passer le nom de la table directement dans la requête après s'être assuré que le nom de la table existe bien (pour éviter les injections).
if(in_array($_GET['table'],$tables))
{
$req = $bdd->prepare('SELECT * FROM '.$_GET['table'].' WHERE pres_id = ?');
$req->execute(array($_GET['modif']));
}
Ce sera accessible uniquement aux admin du site donc normalement pas de risque d'injection SQL.
Je protège juste les variable transmise par l'URL à l'entrée de la page admin.
Petite question pour finir, en relisant le tuto sur SQL, il est indiqué que la requête s’exécute plus rapidement si on la prépare plutôt que si on insert les variable directement dans la requête. Est-ce qu'on parle d'un réel gain de temps ou alors c'est plus du confort ? parce que sur une petite requète de ce type, j'ai du mal a voir le gain que sa pourrait apporter
Les requêtes préparées servent d'abord à ne pas avoir à refaire la même requête qu'on exécuterait plusieurs fois avec des paramètres différents, Dans ce cas oui le gain est notable.
Elles ont aussi l'intérêt d'empêcher les injections SQL. C'est pourquoi tu les retrouveras même pour des requêtes qui ne sont exécutées qu'une fois.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.
N'oubliez pas d'activer les erreurs PDO.