erreur de débutant sur pdo

Par flo3376, il y a 13 ans


Base de données MySQL

bonjour a tous,

je suis en train d'essayer de corriger une vielle page en php, et j'ai ma requête PDO qui n'est pas contente

Fatal error: Call to a member function prepare() on a non-object in /homepages/32/d412740872/htdocs/FFS2/site/tools/config/news/pageprivee.php on line 80

donc en ligne 8 sur le code en dessous

if(! empty($action) && ! empty($pseudo)&& ! empty($titre)&& ! empty($message))
    {       
        if ($action==3)
            {
                $ip=$_SERVER"REMOTE_ADDR"];
                $message= addslashes(htmlspecialchars($message, ENT_QUOTES));
                $data=array('',$dlien,$titre,$message,$ip,$pseudo,$lien);
                $req = $DBPDO ->prepare ('INSERT INTO news (id,dlien,titre,message,ip,pseudo,lien) VALUES (?,?,?,?,?,?,?)');
                //try{
                        $DBPDO = new PDO($dbdns1,$dbuser1 , $dbpass1,
                            array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                        $DBPDO-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                       // try{      
                                $req->execute ($data);
                                unset($_POST);
                        //  }

                     /* catch (PDOException $e) 
                            {
                                echo '<h6>OUPS:</h6>';
                                echo '</br>';
                                echo '<h5>L\'instruction pour la Base de Donnée n\'a pas été comprise correctement</h5>';
                                echo '</br>';
                                echo '</br>';
                                echo '<h5>Module mis en someil</h5>';
                            }*/
              // }
             /* catch (PDOException $e)
                    {
                        echo '<h6>OUPS:</h6>';
                        echo '</br>';
                        echo '<h5>Une base de donnée n\'est pas de bonne humeur pour le moment.</h5>';
                        echo '</br>';
                        echo '<h5>Veuillez réssayer plus tard</h5>';
                        echo '</br>';
                        echo '</br>';
                        echo '<h5>Module mis en someil</h5>';
                    }*/
            }
    }

je suis sûr que j'ai encore fais une erreur de débutant que je suis, mais je ne la voie, pas.

pourriez vous m'aider et m'expliquer.

Merci d'avance Flo

5 réponses

Nairolf, il y a 13 ans

En gros l'erreur dit que $DBPDO n'est pas un objet PDO mais juste une simple variable, tu peux montrer ce que contient cette variable?

flo3376, il y a 13 ans

alors j'ai réussi à m'en sortir mais je suis obligé de mettre les info bdd dans le fichier, il n'en veut pas sinon.

<?php
    define('PROTECTIONINCLUDE', TRUE);
    include_once ($_SERVER"DOCUMENT_ROOT"].'/config/bdall.php');
if(! empty($action) && ! empty($pseudo)&& ! empty($titre)&& ! empty($message))
    {       
        if ($action==3)
            {
                $ip=$_SERVER"REMOTE_ADDR"];
                $message= addslashes(htmlspecialchars($message, ENT_QUOTES));
                $data=array('',$dlien,$titre,$message,$ip,$pseudo,$lien);

                //try{
                        $DBPDO = new PDO('mysql:host= ******;dbname=*****', ' *****', '*******',array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
                        $DBPDO-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        $req = $DBPDO ->prepare ('INSERT INTO news (id,dlien,titre,message,ip,pseudo,lien) VALUES (?,?,?,?,?,?,?)');
                       // try{      
                                $req->execute ($data);
                                unset($_POST);
                        //  }

                     /* catch (PDOException $e) 
                            {
                                echo '<h6>OUPS:</h6>';
                                echo '</br>';
                                echo '<h5>L\'instruction pour la Base de Donnée n\'a pas été comprise correctement</h5>';
                                echo '</br>';
                                echo '</br>';
                                echo '<h5>Module mis en someil</h5>';
                            }*/
              // }
             /* catch (PDOException $e)
                    {
                        echo '<h6>OUPS:</h6>';
                        echo '</br>';
                        echo '<h5>Une base de donnée n\'est pas de bonne humeur pour le moment.</h5>';
                        echo '</br>';
                        echo '<h5>Veuillez réssayer plus tard</h5>';
                        echo '</br>';
                        echo '</br>';
                        echo '<h5>Module mis en someil</h5>';
                    }*/
            }
    }   
?>

la récupération des infos bdd en ligne marche, les variables sont complète, mais je suis obligé de les rentrer manuellement sinon plantage

Nairolf, il y a 13 ans

Tu entend quoi par rentrer manuellement?

Marechoux, il y a 13 ans

Dans ton code (premier message), je vois :

$req = $DBPDO ->prepare ('INSERT INTO news (id,dlien,titre,message,ip,pseudo,lien) VALUES (?,?,?,?,?,?,?)');
$DBPDO = new PDO($dbdns1,$dbuser1 , $dbpass1, array( PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

Cependant, il faut instancier $DBPDO avant de t'en servir pour ta requête préparée.

flo3376, il y a 13 ans

et oui, excusez moi de revenir seulement maintenant, je l'ai compris après cette blague que je ne démarrer pas ma pdo au bon moment, mais merci de confirmer.

@+