Problème de création d'objet PDO

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème de création d'objet PDO

par Ryle » 21 déc. 2007, 13:31

En fait ça fonctionne parce que php ne trouvant pas de constante définie, va par défaut interpréter la valeur de celle-ci comme un string. (si tu actives les messages de type "Notice" dans la gestion d'erreur du php.ini tu auras un avertissement :))

En gros, quand tu fais "define(DATABASE, 'xxxx');" il va chercher s'il trouve constante nommé DATABASE (au cas où elle contiendrait déjà une valeur), et si/puisque il n'en trouve pas, il va considérer qu'il doit probablement s'agir d'une chaine de caractère "DATABASE" qu'il va pouvoir utiliser.
C'est la même chose quand tu récupères des données via $_POST, $_GET etc. Tu peux utiliser $_POST[toto], php va alors chercher la constante toto, ne pas la trouver, utiliser la valeur de la chaine à la place et te retourner la valeur de $_POST['toto'].

Autant lui épargner un travail inutile et lui dire dès le départ que c'est bien une chaine ;) D'autant que le comportement peut être différent :
define(DATABASE, 'xxxx'); // ne trouve pas la constante, définie une constante DATABASE avec la valeur 'xxxx'
define(DATABASE, 'xxxx'); // trouve la constante, utilise sa valeur et définie une constante xxxx avec la valeur 'xxxx'

// alors que

define('DATABASE', 'xxxx'); // défini une constante DATABASE avec la valeur 'xxxx'
define('DATABASE', 'xxxx'); // retourne une erreur car la constante est déjà définie.

par sliderman » 21 déc. 2007, 12:03

Ca ne changera hélas pas grand chose à ton problème, mais tu peux déjà corriger ceci :
// ce sont des chaines que tu définies comme constantes, donc guillemets ou apostrophes obligatoires autour de leurs noms
define('DATABASE', 'xxxx'); 

// la chaine vide après DATABASE est inutile
$db = new PDO('mysql:host=localhost;dbname='.DATABASE, USER, PASS); 
Donc la première question est : qu'est ce qui s'est passé hier ?
tes login/mdp sont ils correct ? le nom de ta base également ? est-tu toujours en localhost ? as-tu essayé de te connecter avec ce user sur mysql ? est-ce que tu arrives à ouvrir une connexion avec mysql_connect() ? ....
je sais pas pourquoi (conf du serveur mal reglé à mon avis) mais aujourdh'ui ça marche

mes constantes ne sont pas définies avec des guillemets (e.g : define(DATABASE, "xxx");)
et ça marche je suis dubitatif mais j'ai pas le temps de chercher pourquoi

par Ryle » 21 déc. 2007, 11:22

Ca ne changera hélas pas grand chose à ton problème, mais tu peux déjà corriger ceci :
// ce sont des chaines que tu définies comme constantes, donc guillemets ou apostrophes obligatoires autour de leurs noms
define('DATABASE', 'xxxx'); 

// la chaine vide après DATABASE est inutile
$db = new PDO('mysql:host=localhost;dbname='.DATABASE, USER, PASS); 
Donc la première question est : qu'est ce qui s'est passé hier ?
tes login/mdp sont ils correct ? le nom de ta base également ? est-tu toujours en localhost ? as-tu essayé de te connecter avec ce user sur mysql ? est-ce que tu arrives à ouvrir une connexion avec mysql_connect() ? ....

Problème de création d'objet PDO

par sliderman » 21 déc. 2007, 11:04

Bonjour,

Je développe en PHP. Dernière version oblige (et me facilitant la vie), je créer des objets PDO.
Mais voila le problème, c'est que depuis hier, je n'arrive plus. Voila, ce que je fait mais l'objet est vide, je n'arrive pas à faire mes requêtes ni rien

Code : Tout sélectionner

$db = new PDO('mysql:host=localhost;dbname='.DATABASE.'', USER, PASS);
Quelqu'un peut m'aider ?

PS : Bien enteendu j'ai fait
en début dee mon script
define(DATABASE,'xxxx');
define(USER,'xxxx');
define(PASS,xxxx');