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 :

Call to a member function prepare() on a non-object [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut Call to a member function prepare() on a non-object
    Bonjour, j'ai crée une fonction qui exécute mes requêtes sur les tables de la BDD avec de paramètres. En local, tous se passe bien mais lorsque j'envoi mes fichiers sur le serveur j'ai ce message d'erreur:
    Fatal error: Call to a member function prepare() on a non-object in /
    =(fonction prepare() appliquée sur un non objet).
    Je n'arrive à dégguer le script.

    Script php fonction
    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
    function query($table, $champ = null, $filtre = null, $valFiltre = null, $idArt, $order = null, $premier = null, $dernier = null){
     
    	 //Incluson de la connexion à la BDD
    	  require('dbConnect/config.php');
     
    	  //Si aucun chacun champ n'es défni on affiche tous
    	  if((isset($champ)) && ($champ == "")){ $champ = '*'; }
     
    	  //On prepare la requete de base
    	  $sql = "SELECT ".$champ." FROM ".$table."";
     
    	  //Si une clause where a ete créer alors......
    	  if($filtre != ""){
    		  $sql .= " WHERE statut = '1' AND corbeille = '0 '";
    	  }
     
    	  if(($filtre != null) && ($filtre != "")){
    		  $sql .= " AND ".$filtre." = ".$valFiltre;
    	  }
     
    	  if($order != "" && $order != null){
    		  $sql .= " ORDER BY ".$idArt." ".$order;
    	  }
     
    	  if(($premier != null) || ($dernier != null)){
    		  $sql .= " LIMIT ".$premier.", ".$dernier;
    	  }
    	  //On execute la requête
    	  $sql = $connect_db->prepare($sql);  //prepare pas total:calim2:
    	  $sql->execute();
     
    	  //On retourne les données sous forme de tableau
    	  while($data = $sql->fetch(PDO::FETCH_OBJ)){
    		  $tb[] = $data;
    	  }
     
    	  return $tb;
    }
    Appel de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     $table = "ma_table"; 
      $champ = "*"; 
      $filtre = "idFiltre"; 
      $valFiltre = "valeur_filtre"; 
      $idArt = "id_ma_table";
      $order = "DESC"; 
      $premier = 0; 
      $dernier = 1;
      $data1erActu = query($table, $champ, $filtre, $valFiltre, $idArt, $order, $premier, $dernier);
    Le script n'est très fin mais j'ai un gain de temps avec

    Script de connexion à la BDD
    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
    <?php
    //Connexion à la base de données
    try {
    	$dns = 'mysql:host=localhost;dbname=bd_name';
    	$user = 'root';
    	$password = '';  
    	$connect_db = new PDO ($dns, $user, $password);
    	$connect_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	$option = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
              PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ);
    } 
    catch (Exception $e) {
    	echo "<h1>Connection au serveur impossibe, erreur:".$e->getMessage()."</h1>";
    	die();
    }
    ?>
    Comment parfaire ma fonction?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Cela signifie que $connect_db n'est pas un objet et donc que ta connexion ne fonctionne pas.

    Je ne sais pas si c'est c'est une faute de frappe ou si ta base s'appelle vraiment comme ça mais tu as un "bd_name" dans ta chaine de connexion.

    Au passage ne met pas de guillemet sur des nombres, ça t'evitera en plus d'avoir un espace qui se promène dans la chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $sql .= " WHERE statut = '1' AND corbeille = '0 '";
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      $sql .= " WHERE statut = 1 AND corbeille = 0 ";
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut
    Oui, J'ai beau regardé mon code de connexion je ne voit pas où est l'erreur. Pourtant en local tout est bon.
    Voici le code complet de connexion, je remplace le serveur, le mot de passe par celui de mon hébergement distant:

    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
    <?php
    //Connexion à la base de données
    try {
    	$dns = 'mysql:host=localhost;dbname=ajmci';  // Je remplace localhost par le serveur; 
    	$user = 'root';     //User par le name de l'hébergement distant                      
    	$password = '';    //Mot de passe de l'hébergement distant
    	$connect_db = new PDO ($dns, $user, $password);
    	$connect_db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	$option = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ);
    } 
    catch (Exception $e) {
    	echo "<h1>Connection au serveur impossibe, erreur:".$e->getMessage()."</h1>";
    	die();
    }
    ?>

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu es sûr qu'il ne faut pas laisser localhost justement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut
    Avec localhost, erreur :
    SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2013
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2013
    Messages : 200
    Points : 102
    Points
    102
    Par défaut
    Abra katabark comme par magie je remet le nom du serveur et ça marche. Qu'est-ce qui peut expliquer ça? problème chez mon hébergeur ou le script?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/02/2014, 23h49
  2. Réponses: 16
    Dernier message: 23/05/2013, 10h35
  3. [PDO] Fatal error: Call to a member function prepare() on a non-object
    Par nu_tango dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/12/2012, 08h33
  4. Call to a member function prepare() on a non-object
    Par KenConnor dans le forum Langage
    Réponses: 8
    Dernier message: 20/01/2011, 22h11
  5. [PDO] Call to a member function prepare() on a non-object
    Par Invité dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/07/2009, 14h39

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