IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Fatal Error => INSERT INTO


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Fatal Error => INSERT INTO
    Bonsoir,
    Mon projet est constituer de 3 fichiers :
    * index.php (connexion à mysql, inclusion des classes, instanciation de la classe Personnage, instanciation de la classe PersonnageManager, requêtes sql)
    * Personnage.class.php (représente des joueurs)
    * PersonnageManager.class.php (envoie des requêtes à mysql)

    // index.php...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
    	// Connexion à mysql...
     
    	try
    	{
    		$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    		$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
    	}
    	catch(Exception $e)
    	{
    		die('Erreur : ' .$e->getMessage());
    	}
     
    	// Inclusion des class...
     
    	function inclureClass($class)
    	{
    		$nomClass = $class . '.class.php';
    		require($nomClass);
    	}
    	spl_autoload_register('inclureClass');
     
    	// Instanciation de la class Personnage
     
    	$perso1 = new Personnage(array(
    									'nom' => 'Marvin',
    									'degats' => 0,
    									'force' => 10,
    									'experience' => 1
    									));
    	$perso2 = new Personnage(array(
    									'nom' => 'Gaetan',
    									'degats' => 0,
    									'force' => 9,
    									'experience' => 1
    									));
     
    	echo $perso1->getNom() . ' possède ' . $perso1->getDegats() . ' de degats, ' . $perso1->getForce() . ' de force et ' . $perso1->getExperience() . ' d\'experience !<br />'; 
    	echo $perso2->getNom() . ' possède ' . $perso2->getDegats() . ' de degats, ' . $perso2->getForce() . ' de force et ' . $perso2->getExperience() . ' d\'experience !<br />'; 
     
    	// Instanciation de la class PersonnageManager...
     
    	$manager = new PersonnageManager($bdd);
     
    	// Requêtes sql...
     
    	$manager->create($perso1);
    // Personnage.class.php...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    <?php
    	class Personnage
    	{
    		private $_id;
    		private $_nom;
    		private $_degats;
    		private $_force;
    		private $_experience;
     
    		public function __construct(array $data)
    		{
    			$this->hydrate($data);
    		}
    		public function hydrate(array $data2)
    		{
    			foreach($data2 as $key => $value)
    			{
    				$method = 'set' . ucfirst($key);
     
    				if(method_exists($this, $method))
    				{
    					$this->$method($value);
    				}
    			}
    		}
     
    		// Les getters...
     
    		public function getId()
    		{
    			return $this->_id;
    		}
    		public function getNom()
    		{
    			return $this->_nom;
    		}
    		public function getDegats()
    		{
    			return $this->_degats;
    		}
    		public function getForce()
    		{
    			return $this->_force;
    		}
    		public function getExperience()
    		{
    			return $this->_experience;
    		}
     
    		// Les setters...
     
    		public function setNom($perso)
    		{
    			if(is_string($perso) AND strlen($perso) <=30)
    			{
    				$this->_nom = $perso;
    			}
    			else
    			{
    				trigger_error('Le nom est invalide !');
    				return;
    			}
    		}
    		public function setDegats($force)
    		{
    			$force = (int) $force;
     
    			if($force >= 0 AND $force <= 30)
    			{
    				$this->_degats += $force;
    			}
    			else
    			{
    				trigger_error('La valeur de la force n\'est pas valide !');
    				return;
    			}
    		}
    		public function setForce($force2)
    		{
    			$force2 = (int) $force2;
     
    			if($force2 > 0 AND $force2 <= 30)
    			{
    				$this->_force = $force2;
    			}
    			else
    			{
    				trigger_error('La valeur de la force n\'est pas valide !');
    				return;
    			}
    		}
    		public function setExperience()
    		{
    			$this->_experience++;
    		}
    		public function frapper($perso2)
    		{
    			if(is_string($perso2) AND strlen($perso2) <= 30)
    			{
    				$perso2->setDegats($this->_force);
    				$this->setExperience;
    			}
    			else
    			{
    				trigger_error('Le nom de la victime est invalide !');
    				return;
    			}
    		}		
    	}
    // PersonnageManager.class.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    	class PersonnageManager
    	{
    		private $_bdd;
     
    		public function __construct(PDO $bdd)
    		{
    			$this->setBdd($bdd);
    		}
    		public function setBdd(PDO $bdd2)
    		{
    			$this->_bdd = $bdd2;
    		}
    		public function create(Personnage $perso)
            {
                $request = $this->_bdd->prepare('INSERT INTO personnages SET nom = :nom, degats = :degats, force = :force, experience = :experience');
     
                $request->bindValue(':nom', $perso->getNom());
    			$request->bindValue(':degats', $perso->getDegats(), PDO::PARAM_INT);
                $request->bindValue(':force', $perso->getForce(), PDO::PARAM_INT);
                $request->bindValue(':experience', $perso->getExperience(), PDO::PARAM_INT);
     
                $request->execute();
            }
    		public function afficherObjet()
    		{
    			var_dump($this->_bdd instanceof PDO);
    		}
    	}
    J'ai une erreur dans ma requête sql dans le fichier PersonnageManager.class.php

    ( ! ) Fatal error: Uncaught exception 'PDOException' with message '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 'force = 10, experience = 1' at line 1' in C:\wamp\www\poo\PersonnageManager.class.php on line 23
    ( ! ) PDOException: 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 'force = 10, experience = 1' at line 1 in C:\wamp\www\poo\PersonnageManager.class.php on line 23

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Je viens d'éditer mon post car le problème a été résolut et qu'un autre est survenue.

    Celui ci m'arrive assez souvent et pourtant, je respecte la syntaxe...

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    dump ta requête pour voir.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bonsoir Benjamin Delespierre,
    Je te remercie de m'avoir répondu.
    J'ai résolu le problème : 'force' est un mot réservé en mysql., j'ai donc modifié le nom de mon champ dans ma table.

    EDIT :
    dump ta requête pour voir.
    A quoi consiste cette opération et comment la met-on en œuvre ?

    Bonne soirée !

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Les mots clés réservés peuvent tout à fait être utilisés en tant que noms pour des colonnes ou des tables (sinon adieu les champs password ou date, ce serait pénible de leur trouver un autre nom)

    Il suffit de mettre le nom du champ / table entre backquotes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select `password` from `date`;
    dump = var_dump = afficher

Discussions similaires

  1. ERROR INSERT INTO SQL TABLE TPS
    Par khaled angem dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/05/2013, 00h24
  2. Réponses: 11
    Dernier message: 08/01/2009, 15h34
  3. Réponses: 1
    Dernier message: 09/10/2008, 11h58
  4. [SQL] SQL syntax error dans fonction insert into
    Par scarfesse dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 21/12/2007, 13h25
  5. Insert Into + Date
    Par BoeufBrocoli dans le forum SQL
    Réponses: 10
    Dernier message: 13/08/2003, 11h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo