Une seule requete PDO avec 2 bases de donnees MySQL

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 : Une seule requete PDO avec 2 bases de donnees MySQL

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 08 août 2011, 02:19

je pense que ca dans le cas d'une class, alors j'ai utilise la methode normale sans class:
<?php

try
              {
                        $connexion = new PDO('mysql:host='.$db_host.';dbname='.$db_general, $db_user, $db_passwd
			, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); //SET NAMES utf8
			$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
                                          
                        $sql = 'SELECT ';
           
                echo $sql;
$req = $connexion->query($sql); 
$result = $req->fetchAll();
$nb = count($result);

if(empty($result))
{
    echo 'Aucun resultat<br />';  
}
    else
    {
        
        // affichage des donnees
            
    }

}
catch(Exception $e)
                            {
                                echo 'Erreur: '.$e->getMessage().'<br />';
				echo 'N: '.$e->getCode();
                                echo 'Cannot connect <br />';
                            }
?>

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par moogli » 07 août 2011, 19:14

Arf, j'ai oublier des mots.

Des méthodes peuvent retourner "false" mais ne pas lever d'exception.
Donc par exemple

$retour = $monobjet->mamethode();
If($retour === false) echo $messagederreur;

Voilà ;)

@+

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 07 août 2011, 03:36

Il parle de la documentation PHP.net
oui je sais que c'est la doc php.net, mais c'est ce que j'ai pas compris
Il faut que tu test le retour des méthodes que tu utilise. Il est possible qu'une méthode retour e râler mais ne lève pas d'exception ;)

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par Blowingfish » 07 août 2011, 02:42

Il faut que tu test le retour des méthodes que tu utilise. Il est possible qu'une méthode retour e râler mais ne lève pas d'exception ;)

Regarde bien les doc des méthodes pour plus d'infos.
@+

j'ai pas compris pour rechercher dans la doc, merci moogli
Il parle de la documentation PHP.net

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 07 août 2011, 02:15

Il faut que tu test le retour des méthodes que tu utilise. Il est possible qu'une méthode retour e râler mais ne lève pas d'exception ;)

Regarde bien les doc des méthodes pour plus d'infos.
@+

j'ai pas compris pour rechercher dans la doc, merci moogli

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par moogli » 05 août 2011, 23:25

Il faut que tu test le retour des méthodes que tu utilise. Il est possible qu'une méthode retour e râler mais ne lève pas d'exception ;)

Regarde bien les doc des méthodes pour plus d'infos.
@+

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 05 août 2011, 07:46

j'ai fais une betise:
$db_charset = 'utf-8';
ca devrait etre:
$db_charset = 'utf8';

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 05 août 2011, 04:30

j'ai utilise la methode traditionnelle et ca genre une erreur:
try
                    {
                        $connexion = new PDO('mysql:host='.$db_host.';dbname='.$db_general, $db_user, $db_passwd
			, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $db_charset")); //SET NAMES utf8
			$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
                    }
					 
			catch(Exception $e)
                            {
                                echo 'Erreur: '.$e->getMessage().'<br />';
				echo 'N: '.$e->getCode();
                                echo 'Cannot connect to '.$db_host.' '.$db_general.' '.$db_user.' '.$db_passwd.' <br />';
                            }
 
 $sql = 'SELECT * FROM comments WHERE idcat = "1" AND id_cl = "1" ORDER BY idcom DESC LIMIT 10'; 
$req = $connexion->query($sql); 
                      
$result = $arrAll->fetchAll(); 
echo '<p>Cette requête retourne '.count($result)." enregistrements.</p>\n";

Erreur: SQLSTATE[42000] [1115] Unknown character set: 'utf'<br />N: 0Cannot connect to localhost general root pass <br /><br />
<b>Fatal error</b>: Call to a member function query() on a non-object in <b>comments.php</b> on line <b>32</b><br />
alors que l'encodage est et la ligne 32:
$db_charset = 'utf-8';

$req = $connexion->query($sql);

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par moogli » 04 août 2011, 09:50

tu utilise mal ta classe
$PDOConnect = new PDOConnexion($db_host, $db_user, $db_passwd, $db_name, 'erreur', 'utf8');
$increment_lis = $PDOConnect->queryQuoted($increment_lis, PDO::PARAM_INT);
$num = $PDOConnect->queryQuoted($num, PDO::PARAM_INT);
$sql = $PDOConnect->query('UPDATE table SET heard='.$increment_lis.' WHERE num = '.$num.''); <= ça c'est pas bon vu les lignes suivantes :)
try {
$a = $PDOConnect->query($sql); <== ça c'est le pire :)
}
catch(Exception $e)
{
echo 'Erreur : '.$e->getMessage().'';
echo 'N° : '.$e->getCode();
echo '<pre>',var_dump($PDOConnect->errorInfo()),'</pre><hr />';
var_dump($a);
}

a la limite
$sql = 'UPDATE table SET heard='.$increment_lis.' WHERE num = '.$num);
try {
$a = $PDOConnect->query($sql); <== ça c'est le pire :)
}


pour ce qui est de la classe elle est inutile car n'apporte pas d'amélioration ou de fonctionnalité à la classe PDO existante autant ne pas l'utiliser;)


@+

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 03 août 2011, 04:55

est ce que la class est correcte?

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 02 août 2011, 10:38

j'ai constate la raison duquelle la mise a jour ne se fait pas, parce que j'utilise quote, elle ajoute des (') a la requete:
<?php

            $increment_lis = $heard + 1; // on incremente le compteur par 1
            echo '<b>'.$increment_lis.'</b><br>'; // sans les (')
            $increment_lis = $PDOConnect->queryQuoted($increment_lis, PDO::PARAM_INT);
            echo '<b>'.$increment_lis.'</b><br>'; // avec les (')

$sql = 'UPDATE ....';

echo 'nombre: '.$increment_lis.'<br />'; // il affiche '14' avec des (')
?>
comment puis je faire afin d'eliminer les (') apres ma requete

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 02 août 2011, 10:15

je pense avoir une faute de saisie, au lieu de mettre la fonction queryRun j'ai mis seulement query, par consequant ca ne fait aucun update, le champs reste le meme :(

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 02 août 2011, 09:56

voila le code en entier, je n'ai pas encore applique l'heritage:
// la class

class PDOConnexion {
          
        private $db_host, $db_user, $db_passwd, $db_name, $connexion, $errorMessage, $charset;

        
		public function __construct($db_host='', $db_user='', $db_passwd='', $db_name='', $errorMessage='', $charset='')
            {
                $this->db_host = $db_host;
                $this->db_user = $db_user;
                $this->db_passwd = $db_passwd;
                $this->db_name = $db_name;
                $this->errorMessage = $errorMessage;
                $this->charset = $charset;
                
                
                try
                    {
                        $connexion = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name, $this->db_user, $this->db_passwd
			, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES $this->charset")); //SET NAMES utf8
			$connexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
                    }
					 
			catch(Exception $e)
                            {
                                echo $this->errorMessage .': '.$e->getMessage().'<br />';
				echo 'N: '.$e->getCode();
                                echo 'Cannot connect to '.$db_host.' <br />';
                            }
                                $this->connexion = $connexion;
        }
        
                
    

		public function queryPrep($requete)
		{			
                    $this->requete = $requete;
                    $prep = $this->connexion->prepare($this->requete);
			        $this->prep = $prep;
		}
            
                
        public function queryExec()
		{			
                        $execute = $this->prep->execute();
            			$this->execute = $execute;
		}
     
        public function queryQuoted($value, $param)
        {
            $this->value = $value;
            $this->param = $param;
            return $this->connexion->quote($this->value, $this->param);
        }
                
        public function queryRun($requete)
        {
            $this->requete = $requete;
            return $this->connexion->query($this->requete);
        }


// le code update

$PDOConnect = new PDOConnexion($db_host, $db_user, $db_passwd, $db_name, 'erreur', 'utf8');

$increment_lis = $PDOConnect->queryQuoted($increment_lis, PDO::PARAM_INT);
$num = $PDOConnect->queryQuoted($num, PDO::PARAM_INT);
$sql = $PDOConnect->query('UPDATE table SET heard='.$increment_lis.' WHERE num = '.$num.'');  
try {  
$a = $PDOConnect->query($sql);  
}  
catch(Exception $e)  
{  
echo 'Erreur : '.$e->getMessage().'';  
echo 'N° : '.$e->getCode();  
echo '<pre>',var_dump($PDOConnect->errorInfo()),'</pre><hr />';  
var_dump($a);
}
NB: je l'ai pris d'ici, apres une recherche sur le net :)

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par moogli » 02 août 2011, 09:28

je n'utilise pas de class afin de tester ma requete, pourquoi ca ne marche pas meme avec la facon traditionnelle, un autre coup:
$sql = 'UPDATE '; 
try { 
$a = $PDOConnect->query($sql); 
} 
catch(Exception $e) 
{ 
echo 'Erreur : '.$e->getMessage().''; 
echo 'N° : '.$e->getCode(); 
} 
echo '<pre>',var_dump($PDOConnect->errorInfo()),'</pre><hr />'; 
var_dump($a);
heu ben PDO c'est une classe ^^

la avec ton code je suis certainqu'il ne fonctionne pas, une requete sql qui ne contient que UPDATE c'est pas valide manque des chose ;)

le var_dump devrait être dans le catch ;)


envoie ton code complet, prce que la y a que des bout et on s'y perd ('est d'ailleur le problème depuis le début du fil de discution ça se mélange les pinceaux et finlament et ne sais plus trop où ça en est :)

@+

Re: Une seule requete PDO avec 2 bases de donnees MySQL

par rimie » 02 août 2011, 06:16

je n'utilise pas de class afin de tester ma requete, pourquoi ca ne marche pas meme avec la facon traditionnelle, un autre coup:
$sql = 'UPDATE ';  
try {  
$a = $PDOConnect->query($sql);  
}  
catch(Exception $e)  
{  
echo 'Erreur : '.$e->getMessage().'';  
echo 'N° : '.$e->getCode();  
}  
echo '<pre>',var_dump($PDOConnect->errorInfo()),'</pre><hr />';  
var_dump($a);