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 :

PDO probleme de connection. [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut PDO probleme de connection.
    Bonjour,
    Je suis actuellement face a un problème de taille puisque cela fait plus de trois jours que je ne trouver pas de solution, même après avoir consulter google...

    Explications:
    Je suis en train de créer un site web avec php/mysql. Et n'ayant pas accès directement aux serveurs apache et mysql, je me suis installer sur mon PC un WAMPSERVER histoire de développer tranquille et ensuite tous transférer sur le serveur dédier UNIX (RedHat).

    J'utilise PDO pour la connexion a mysql.

    Mon WAMPSERVER est a jour, (trop peut être...):
    -APACHE 2.2.17
    -PHP 5.3.4
    -MySql 5.1.53

    Tous marche a la perfection sur ce serveur.

    Puis est venu le temps de basculer sur le redhat pour test et mise en ligne...

    Problème:
    J’obtiens ici un des problème les plus étrange auquel j'ai jamais été confronte:
    toutes les pages se connectant via PDO a mysql foire et reste blanche sans rien afficher (même avec des echo ni même du HTML) j’obtiens de manière complétement aléatoire certaines erreurs venant de PDO.

    version sur le serveur:
    -Mysql 5.0.77
    -PHP 5.1.6
    -Apache 2.2.3

    bien que les version soit différente PDO est installer avec les drivers.
    Petit code que j'ai trouver sur le site:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    foreach(get_loaded_extensions() as $extension)
    {
       if(strpos(strtolower($extension), 'pdo') !== FALSE)
        {
           echo $extension.'<br/>';
        }
    }
     
    //Affiche
     
    PDO
    pdo_mysql
    pdo_sqlite

    En voila un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: PDO::prepare() [function.PDO-prepare]: SQLSTATE[HY000]: General error: constructor arguments must be passed as an array in /www3/OOV/oov/actu/postActu_PDO.php on line 36
     
    Warning: PDO::prepare() [function.PDO-prepare]: SQLSTATE[HY000]: General error: failed to instantiate user-supplied statement class in /www3/OOV/oov/actu/postActu_PDO.php on line 36
     
    Fatal error: Call to a member function execute() on a non-object in /www3/OOV/oov/actu/postActu_PDO.php on line 83
    code de la ligne correspondante (mais ca ne vien pas de la je crois donc):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $res = $mysqlcnx->query("SELECT * FROM actualites ORDER BY Priority");
    code de la connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try
    		{
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    			$pdo_options[PDO::ATTR_PERSISTENT] = false;
    			$mysqlcnx = new PDO("mysql:host=localhost;dbname=newsoov", '$login', '$mdp', $pdo_options);
    		}
    		catch (Exception $e)
    		{
    			die("An error occured: " . $e->getMessage());
    		}
    Je me tue a essayer de trouver une solution, j'ai aussi jeter un œil au log sql:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    110722 16:50:57 [Warning] Aborted connection 2 to db: 'dbName' user: 
    'userName' host: 'localhost' (Got an error reading communication packets)
    qui aparait a chaque tentative de connection... doc internet pas tres bavard la dessus (je meme tester ce que Mysql preconnise dans ce genre de cas...)

    J'ai aussi fait des tests sur le retour de la fonction PDO et il me retourne un objet PDO, vide...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			var_dump($mysqlcnx);
    			print_r($mysqlcnx);
     
    			if ($mysqlcnx == NULL)
    			{
    				ECHO "NULL";
    			}
    			else
    			{
    				ECHO "PAS NULL";
    			}
    affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    object(PDO)#1 (0) { } PDO Object ( ) NULL
    Help please, je suis dans le caca!

    P.S.: le serveur RedHat est en loopback, le 'localhost', c'est normal.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    t'as mis setFetchMode ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    L'objet pdo est vide, comment je pourrai appeler cette méthode?

    les erreurs que j'ai mise ici sont sur le query, mais si je met un $db->prepare(...)
    ou une autre methode ca me sort les meme erreurs.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Vodsky Voir le message
    L'objet pdo est vide, comment je pourrai appeler cette méthode?
    l'objet PDO est toujours vide, il ne contient aucune propriété ...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    je met quoi comme valeur?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Vodsky Voir le message
    je met quoi comme valeur?
    la question était plutôt si t'en a mis un ou pas, montre tout ton code

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    Non je n'ai pas mis de setFetchMode.

    Voici le code:
    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
    <?php
    	session_start();
    ?>
    <?//xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
      <head>
      	<meta http-equiv="Pragma" content="no-cache" />
    	<link rel="stylesheet" type="text/css" href="css/actu.css" />
    	<title>Actualites</title>
      </head>
     
      <body>
    <?php	
    	if (isset($_SESSION['from']) && $_SESSION['from'] == "writeActu.php")
    	{
    		/*
    			Connexion aux bases mysqlcnx via l'extension PDO de PHP
    		*/
    		try
    		{
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    			$pdo_options[PDO::ATTR_PERSISTENT] = false;
    			$mysqlcnx = new PDO("mysql:host=localhost;dbname=newsoov", 'user', 'mdp', $pdo_options);
    		}
    		catch (Exception $e)
    		{
    			die("An error occured: " . $e->getMessage());
    		}
     
    		/*
    			Prepare la requete sql
    		*/
    		$query = $mysqlcnx->prepare("INSERT INTO actualites VALUES('', ?, ?, ?, ?, ?)");
     
    		if (isset($_POST['title']))
    		{
    			$queryRep[0] = htmlspecialchars($_POST['title']);
    		}
     
    		if (isset($_POST['url']))
    		{
    			$queryRep[1] = htmlspecialchars($_POST['url']);
    		}
     
    		if (isset($_POST['desc']))
    		{
    			$queryRep[2] = htmlspecialchars($_POST['desc']);
    		}
     
    		if (isset($_POST['priority']))
    		{
    			$queryRep[3] = htmlspecialchars($_POST['priority']);
    		}
     
    		if (isset($_POST['atTop']))
    		{
    			$queryRep[4] = htmlspecialchars($_POST['atTop']);
    		}
     
    		for ($j = 0; $j < 5; $j++)
    		{
    			if (!isset($queryRep[$j]))
    			{
    				$queryRep[$j] = "";
    			}
    		}
     
    		if ($queryRep[4] == 1)
    		{
    			$sortAtTopQuery = $mysqlcnx->query("SELECT Id FROM actualites WHERE AtTop = '1'");
    			$res = $sortAtTopQuery->fetch();
    			if ($res != false)
    			{
    				$q = $mysqlcnx->prepare("UPDATE actualites SET AtTop='0' WHERE Id=?");
    				$q->execute(Array($res['Id']));
    			}
    			$sortAtTopQuery->closeCursor();
    		}
    			$_SESSION['from'] = "postActu.php";
    			$query->execute($queryRep);
    			$mysqlcnx = NULL;
    			unset($mysqlcnx);
    	}
    ?>
    	<meta http-equiv="refresh" content="2; url=writeActu.php" />
      </body>
     
    </html>

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    y'a pas de ligne 100 dans ton code, met exactement les mêmes choses,
    sinon tu n'as pas a mettre de htmlspecialchars sur tes paramètres

  9. #9
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

    j'ajoute : met tout le code PDO dans le try/catch...


  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par ska_root Voir le message
    Bonjour,

    j'ajoute : met tout le code PDO dans le try/catch...

    pourquoi faire ? il est en mode exception si y'a un erreur le script s’arrêtera et affichera l'erreur

  11. #11
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    heu, je ne connais pas bien les options de l'objet de connexion PDO, mais la doc dit :

    PDO::ERRMODE_EXCEPTION

    En plus de définir le code erreur, PDO lancera une exception PDOException et y définit les propriétés afin de représenter le code erreur et les informations complémentaires
    je ne vois pas où il est précisé que tu peux te passer de la capture...
    néanmoins, je te crois

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par ska_root Voir le message
    je ne vois pas où il est précisé que tu peux te passer de la capture...
    néanmoins, je te crois
    ...

    a quoi va te servir ta capture ?

  13. #13
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    dans le cas présent, à pas grand chose effectivement, mais dans ce cas, autant retirer tout le try/catch...


  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    Bonjour, j'actualise mes post voici les erreur pour cette page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning: PDO::prepare() [function.PDO-prepare]: SQLSTATE[HY000]: General error: constructor arguments must be passed as an array in /www3/OOV/oov/actu/postActu_PDO.php on line 36
     
    Warning: PDO::prepare() [function.PDO-prepare]: SQLSTATE[HY000]: General error: failed to instantiate user-supplied statement class in /www3/OOV/oov/actu/postActu_PDO.php on line 36
     
    Fatal error: Call to a member function execute() on a non-object in /www3/OOV/oov/actu/postActu_PDO.php on line 83
    En désespoir de cause j'ai tout transformer en mysqli mais le sujet m’intéresse puisque ça me fout les boules et que je veux le faire avec PDO. D'autant plus qu'il y a plein de personne dans ce cas (c.f. internet...) et qu'une réponse serai la bienvenue.

    P.S.: Je rappel que j'obtiens ces erreurs de manière aléatoire... des fois page blanche des fois erreurs...

    Citation Envoyé par ska_root Voir le message
    dans le cas présent, à pas grand chose effectivement, mais dans ce cas, autant retirer tout le try/catch...

    Dans ce cas, si PDO provoque une erreur et qu'une exception est lancée a cet endroit du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		try
    		{
    			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    			$pdo_options[PDO::ATTR_PERSISTENT] = false;
    			$mysqlcnx = new PDO("mysql:host=localhost;dbname=newsoov", 'user', 'mdp', $pdo_options);
    		}
    Il ce pourrait que le message d'erreur contient les information de connection a la base SQL, i.e. le user et le mot de pass... ce qui serai embêtant...

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    essaye en supprimant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pdo_options[PDO::ATTR_PERSISTENT] = false;
    pourquoi le mettre sur false sachant qu'il l'est par défaut ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    Effectivement mais c’était pour être sur, a la base je l'avait pas mis. c'est mon boss qui planche avec moi la dessus qui m'avait demander d’être sur de ça.
    Ça ne change rien au problème l'erreur ne viens pas de la...

    Dernière news: nous avons tester avec une base sqlite pour voire si c’était mysql qui était mal confé, pareil même erreurs.

    P.S.: a propos des options, j'ai essayer les deux maniere de faire:
    - celle comme montré dans le code et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $mysqlcnx = new PDO("mysql:host=localhost;dbname=newsoov", 'user', 'mdp');
    $mysqlcnx->setAttribute('atribut', 'option');
    Avec cette deuxieme methode il semble qu'il soit plus dure d'obtenire l'affichage des erreurs.. ici la page reste blanche en ignorant tout le code. I.e si j'affiche le code source de la page ca donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html>
    <head></head>
    <body>
    <pre></pre>
    </body>
    </html>
    celon firebug... sinon si j'affiche la source directement via firefox, y a rien... page vide.

  17. #17
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est un erreur qui vient de la classe PDOStatement, qui visiblement n'arrive pas se charger, je te conseil de faire un test sur un autre serveur avec un version à jour de PHP

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    c'est un erreur qui vient de la classe PDOStatement, qui visiblement n'arrive pas se charger, je te conseil de faire un test sur un autre serveur avec un version à jour de PHP
    Celons toi cela serai du a la version de PHP du serveur?
    Il est aussi vrai que sur mon WAMP comme dis dans mon premier post, le code marche très bien...

    Je n'ai pas la possibilité de teste sur un autre serveur la ou je suis. Mais si il s’avère que le problème viens de là, je me met sous mysqli de manière définitive.

  19. #19
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par Vodsky Voir le message
    Celons toi cela serai du a la version de PHP du serveur?
    y'a de grand chance ta version est vraiment obsolète (5 ans), il est grand temps de la mettre à jour

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 59
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    y'a de grand chance ta version est vraiment obsolète (5 ans), il est grand temps de la mettre à jour
    Haha merci, je vais dire ca a mon boss, il va etre content

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/07/2005, 13h42
  2. Problème de connection Internet
    Par polka91 dans le forum Mandriva / Mageia
    Réponses: 8
    Dernier message: 22/04/2005, 21h54
  3. Probleme de connection avec MSDE
    Par critok dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/04/2005, 00h20
  4. Réponses: 10
    Dernier message: 16/03/2005, 18h25
  5. Probleme de connection entre postgresql et PgAccess
    Par Missvan dans le forum PostgreSQL
    Réponses: 11
    Dernier message: 24/03/2004, 11h14

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