Warning: PDOStatement::execute()

Résolu/Fermé
linsomniac - 17 janv. 2014 à 04:36
 Utilisateur anonyme - 17 janv. 2014 à 17:54
Bonjour,
J'ai cette erreur dans mon code et je ne vois pas d'où elle vient


Warning: PDOStatement::execute(): 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 'nom = 'Harry Potter'' at line 1 in /Users/az/Sites/POO/TP3/Manager.class.php on line 19


Voici mon code:

public function exist($perso)
{
$req = $this -> _bdd -> prepare("SELECT COUNT(*) FROM".$perso -> type()."WHERE nom = ?");
$req -> execute(array($perso -> nom())); // ligne 19
return (bool) $req -> fetchColumn();
}

Je sais que c'est une erreur de syntaxe, mais je vois pas ou elle est.
Merci d'avance


5 réponses

Utilisateur anonyme
17 janv. 2014 à 09:12
Bonjour

Tu n'as pas mis d'espace après FROM ni avant WHERE. Si ta t'able s'appelle 'TOTO', ta requête est donc :
"SELECT COUNT(*) FROMTOTOWHERE nom = ?"

Là, je crois que l'erreur est évidente
0
Bien merci pour cette réponse, c'est vrai, j'avais oublier les espaces.

Sinon j'ai un autre souci toujours avec la meme requete.
Desormet, j'ai cette erreur:


Warning: PDOStatement::execute(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'personnages.magicien' doesn't exist in /Users/az/Sites/POO/TP3/Manager.class.php on line 19


Ce qui veut dire que ma table n'existe. Et c'est vrai, la table personnage.magicien n'existe pas, celle qui existe, c'est la table Magicien tout court.
Ce qui est bizard, c'est que lorsque je fais un echo $perso -> type(), ça m'affiche bien Magicien.
Alors pourquoi dans ma requete ça ne m'affiche pas ce qu'il faut?

Une petite précision, Magicien est aussi le nom de la class fille de la class Personnage.
Merci....
0
Utilisateur anonyme
17 janv. 2014 à 15:34
la table personnage.magicien n'existe pas, celle qui existe, c'est la table Magicien tout court
Mais personne ne te parle de la table personnage.magicien. Le message parle de personnages.magicien. Tu ne vois pas la différence ? Le "s" de personnage.
Je suppose que si tu n'es pas à un "s" près, tu n'es pas une majuscule près non plus. Ton problème vient peut-être d'un Magicien / magicien
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
Modifié par Pitet le 17/01/2014 à 16:02
Salut,

Il semble que PDO ajoute automatiquement le nom de la base de données devant le nom des tables dans la requêtes préparées.

Donc si ta base de données s'appelle personnages et ta table magicien, la requête
SELECT COUNT(*) FROM personnages.magicien
devrait être correcte.

Ton erreur vient peut être d'un problème de casse si ta table s'appelle Magicien (avec un M majuscule) et que ton SGBD est sensible à la casse.
Essaye d'écrire en dur le nom de la table pour vérifier :
$req = $this->_bdd->prepare("SELECT COUNT(*) FROM Magicien WHERE nom = ?");



Bonne journée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut, merci pour vos reponce, c'est le pere qui avait raison, j'avais nomé ma table Magiciens et non Magicien
Bon foudra que je fasse un peu plus attention à comment j'écris les choses.
Merci
0
Utilisateur anonyme
17 janv. 2014 à 17:54
Je n'avais même pas raison : je parlais de personnages ^^
L'essentiel, c'est que ça marche.
0