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 :

Insérer mes variables dans ma BDD ( Call to a member function prepare() on a non-object )


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut Insérer mes variables dans ma BDD ( Call to a member function prepare() on a non-object )
    Bonjour à tous,

    Voilà, je pense que le titre est assez explicite.
    Je vous explique le contexte : J'utilise un script php me permettant suivant les adresses postales de ma bdd de géocoder ces dernières en coordonnées GPS. Et c'est justement ces fameuses coordonnées GPS que je souhaiterais enregistrer dans ma BDD à la volée.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $add_latlng = $database->prepare('INSERT INTO experts(NewAdresse, lat, lng) VALUES (:NewAdresse, :lat, :lng)');
    	$add_latlng->execute(array(
        	'NewAdresse' => $formatted_address,
        	'lat' => $lat,
        	'lng' => $lng
        	));
    Et suite à ce message j'ai le droit à une jolie erreur :
    Call to a member function prepare() on a non-object ...
    Auriez-vous une solution ?
    Merci à vous.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    bonjour,

    $database ne doit pas être un objet PDO donc PHP ne connais pas la méthode prepare pour l'objet $database. Est tu sur que la connexion à la BDD c'est bien passée ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Pour ce qui est de la connexion, elle s’exécute correctement.

    Voici la fonction qui me permet de me connecter :

    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
     
    function connexionBDD(){
     
    	global $username, $password, $database;
    	$connection=mysql_connect ('localhost', $username, $password);
    	if (!$connection) {  
      		die('Not connected : ' . mysql_error());
    	} 
     
    	$db_selected = mysql_select_db($database, $connection);
    	if (!$db_selected) {
      		die ('Can\'t use db : ' . mysql_error());
    	}
    	return $connection;
     
    }

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    A quel moment initialises-tu la variable $database ?

    tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $database=connexionBDD();
    mais Exia93 a raison tu utilises la methode "prepare()" qui est une méthode de pdo

    pour faire une requete avec mysql_connect c'est mysql_query qu'il faut utilser (non objet)

    dans votre exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //recuperation du pointeur de connection
    $connection=connexionBDD();
     
    //appel de mysql_query avec le pointeur en parametre
    mysql_query('Requete sql',$connection);

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    prepare() est aussi une méthode de mysqli.

    En tout état de cause, tu ne devrais pas utiliser l'extension mysql-*.

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup de votre intérêt.

    D'accord, j'ai pas tout saisi ( débutant sorry ) alors j'ai tout remplacé :

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $add_coord = "INSERT INTO experts (`NewAdresse`,`lat`,`lng`) VALUES (". $formatted_address .", ". $lat .", ". $lng .");";
    	$requete = mysql_query($add_coord) or die( mysql_error() ) ;
    Et j'ai maintenant le droit à ceci :

    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
    Une idée ?

  7. #7
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    En copiant dans un fichier
    et en faisant un
    No syntax errors detected
    On peut avoir le code un peu plus large avec le numéro d'erreur ?

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par Bovino Voir le message
    prepare() est aussi une méthode de mysqli.

    En tout état de cause, tu ne devrais pas utiliser l'extension mysql-*.
    Autant pour moi, je connais peu mysqli (juste de nom, jamais utitilisé), je suis passé de mysql_* à pdo (avec les ORM des frameworks notamment)

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par imikado Voir le message
    En copiant dans un fichier
    et en faisant un
    On peut avoir le code un peu plus large avec le numéro d'erreur ?
    Désolé je ne vois pas ce que tu veux

    Mon code ? Le voici :
    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
     
    <?php
     
    include("connectionBDD.php");
     
    connexionBDD();
     
    $sql = 'SELECT * FROM experts WHERE Ismap = 1';
    $req = mysql_query($sql) or die('Erreur SQL!<br />'.$sql.'<br />'.mysql_error());
    $lat = 'NULL';
    $lng = 'NULL';
     
    while ($data = mysql_fetch_array($req)) { 
     
    	$NewVille = preg_replace('/CEDEX.*/', '', strtoupper($data['Ville']));
    	if (preg_match("#B.P.13#", $data['Adresse2'])) {
    		$NewAdresse2 = '';
    	}else{
    	$NewAdresse2 = preg_replace('/BP.*/', NULL, strtoupper($data['Adresse2']));
    	}
    	if ($data['Pays'] == "FRANCE METROPOLE"){ 
    		$adresseBrut = urlencode($data['Adresse']." ".$NewAdresse2." ".$data['CodePostal']." ".$NewVille);
    	}else{
    		$adresseBrut = urlencode($data['Adresse']." ".$NewAdresse2." ".$data['CodePostal']." ".$NewVille." ".$data['Pays']);
    	}
     
    	$url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$adresseBrut."&sensor=false";
     
       	$ch = curl_init(utf8_encode($url));
       	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      	 $result = curl_exec($ch);
       	$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       	curl_close($ch);
       	if ($httpCode == 200) {
         	$geocode = json_decode($result);
          	$lat = $geocode->results[0]->geometry->location->lat;
          	$lng = $geocode->results[0]->geometry->location->lng; 
          	$formatted_address = $geocode->results[0]->formatted_address;
          	$geo_status = $geocode->status;	
          	$location_type = $geocode->results[0]->geometry->location_type;
     
       	}else{
         		$geo_status = "HTTP_FAIL_$httpCode";
       	}
     
     
    	$add_coord = "INSERT INTO experts ( NewAdresse, lat, lng ) VALUES(".$formatted_address.", ".$lat.", ".$lng.")";
    	$requete = mysql_query($add_coord) or die( mysql_error() ) ;
     
    	sleep(2);
    }
     
    ?>
    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
     
    function connexionBDD(){
     
    	global $username, $password, $database;
    	$connection=mysql_connect ('localhost', $username, $password);
    	if (!$connection) {  
      		die('Not connected : ' . mysql_error());
    	} 
     
    	$db_selected = mysql_select_db($database, $connection);
    	if (!$db_selected) {
      		die ('Can\'t use db : ' . mysql_error());
    	}
    	return $connection;
     
    }

  10. #10
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    J'avais mal lu l'erreur: c'est une erreur d'une requete et non une erreur de syntaxe php

    Quel requête est en erreur ?

    Si c'est celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $add_coord = "INSERT INTO experts ( NewAdresse, lat, lng ) VALUES(".$formatted_address.", ".$lat.", ".$lng.")";
    Cela peut venir d'une variable non renseigné essayez de mettre entre quote

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $add_coord = "INSERT INTO experts ( NewAdresse, lat, lng ) VALUES('$formatted_address','$lat', '$lng')";
    note: avec les doubles quotes, les variables php sont intérprétés pas besoin de concaténation

  11. #11
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Ah, sa avance, ou pas !
    Nouveau message d'erreur :
    Duplicate entry '0' for key 'PRIMARY'

  12. #12
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    La clé primaire est elle auto incrémentée ?

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Non, il faudrait ?
    J'ai déja des valeurs défini.

  14. #14
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Dans ce cas la il faudrait la définir à l'insertion

    Duplicate entry '0' for key 'PRIMARY'

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Comment ça ?

    Désolé mais je ne comprends pas trop pourquoi sa doit agir sur ma clé primaire, puisque ce n'est pas elle que je demande à modifier.

  16. #16
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    On parle de la requete
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO experts
    au moment de faire un insert il faut soit
    une clé primaire incrémentale, elle sera rempli automatiquement par le SGBD

    soit une clé primaire non incrémentale
    Là il faut la définir à l'insertion

    Exple: (avec une clé "id")
    Cas incrémentale:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO experts (monChamp) VALUES ('maValeur');

    Cas non incrémentale
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO experts (id,monChamp) VALUES (2,'maValeur');

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2013
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2013
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Sa marche nickel,

    Merci à toi imikado pour ta patience ! Sujet résolu !

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

Discussions similaires

  1. [MySQL] Call to a member function prepare() on a non-object
    Par karamaster dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/03/2014, 16h46
  2. Réponses: 1
    Dernier message: 12/02/2014, 23h49
  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