Problèmes jointures PHP et SQL

nicosjack
Invité n'ayant pas de compte PHPfrance

16 mars 2014, 14:28

Énorme merci à toi !! Tout fonctionne parfaitement, c'est super :D

J'ai juste une dernière petite question qui m'aidera probablement pour la suite :
Quand je fais une requête et que j'essaye de compter combien de lignes sont retournées, j'obtiens une erreur également :
$requete = $DB->query('SELECT nom_client FROM clients');
$requete->rowCount();
Voici l'erreur :
Call to a member function rowCount() on a non-object

Pourquoi j'ai toujours cette erreur ?

Mammouth du PHP | 571 Messages

18 mars 2014, 18:57

Il faut réécrire la méthode query de la classe DB de telle sorte qu'elle exécute soit une requête sql préparée soit une requête sql non preparée.
//DB.php
//classe DB
 //exécute une requête préparée si le paramètre $data est present sinon exécute une requête non preparée
        public function query($sql, $data = null ) {
	  $requete = $this->db->query( $sql );
	  if(  $data !==null ) {
               $requete = $this->db->prepare( $sql );
               $requete->execute($data);
	  }
        return $requete->fetchAll(PDO::FETCH_OBJ);
        }
Quand je fais une requête et que j'essaye de compter combien de lignes sont retournées, j'obtiens une erreur également
pour compter le nombre de lignes :
$requete = $DB->query('SELECT count(*) as nombreDeClients FROM clients');
var_dump($requete);

nicosjack
Invité n'ayant pas de compte PHPfrance

19 mars 2014, 10:58

Merci beaucoup !

Par contre malheureusement pour mes requêtes préparées, j'obtiens une erreur de syntaxe SQL : Syntax error or access violation: 1064 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 '?'

Voici un exemple de requête préparée qui ne fonctionne plus :
$produits = $DB->query('SELECT * FROM produits WHERE date_livraison = ?', array($datelivraison));

nicosjack
Invité n'ayant pas de compte PHPfrance

19 mars 2014, 11:07

Finalement c'est bon, je viens de trouver l'erreur, la fonction doit plutôt ressembler à ça :
	public function query($sql, $data = null) {
		if($data !== null) {
			$requete = $this->db->prepare($sql);
			$requete->execute($data);
		}
		else {
			$requete = $this->db->query($sql);
		}
		return $requete->fetchAll(PDO::FETCH_OBJ);
	}
Merci encore pour toute votre aide :)

Mammouth du PHP | 571 Messages

20 mars 2014, 12:40

Finalement c'est bon, je viens de trouver l'erreur, la fonction doit plutôt ressembler à ça :
	public function query($sql, $data = null) {
		if($data !== null) {
			$requete = $this->db->prepare($sql);
			$requete->execute($data);
		}
		else {
			$requete = $this->db->query($sql);
		}
		return $requete->fetchAll(PDO::FETCH_OBJ);
	}
Merci encore pour toute votre aide :)
sur ce coup t'as bien très bien fait d'utiliser le else.