[RESOLU] fonction pdo-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 : [RESOLU] fonction pdo-mysql

Re: [RESOLU] fonction pdo-mysql

par ghost5922 » 05 juin 2013, 14:47

ha c'est moi qui oublie avec l'age :D ^^

Re: fonction pdo-mysql

par moogli » 05 juin 2013, 14:47

c'est même mon premier message :mrgreen:
salut,


le globals c'est le mal passe l'objet pdo en paramètre de la fonction.

ensuite tu utilise echo $row->id; alors que tu demande un tableau associatif $stmt->setFetchMode(PDO::FETCH_ASSOC);


Tu peux utiliser fetchAll() plutôt que ta boucle while ;)

@+

Re: [RESOLU] fonction pdo-mysql

par ghost5922 » 05 juin 2013, 12:07

Héhé parfait :)

par contre Moogli a pas du faire attention au code sinon il aurai surement dit global c'est le mal :D vois si tu peu passe $bd dans ta fonction :)

Re: [RESOLU] fonction pdo-mysql

par moogli » 05 juin 2013, 11:32

du coup le debuggage c'est pratique hein :mrgreen: :mrgreen: :mrgreen: :evil: :evil: :evil:

Re: fonction pdo-mysql

par Cypher_PHP » 05 juin 2013, 10:54

c'est bon
j'ai trouvé
quel c**** je suis !
j'ai oublié de déclarer la connexion

merci à moogli et ghost5922 pour vous avoir dérangé ;)
	function PDOConnect(){
		global $db;

		try{
			$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
			$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//			echo "Connexion r?ussie<br />";
		}catch(Exception $e){
				echo "Connexion pas réussie<br />";
				echo "Erreur : ".$e->getMessage()."<br />";
				echo "N° : ".$e->getCode();
		}
	}
PDOConnect();

Re: fonction pdo-mysql

par Cypher_PHP » 05 juin 2013, 09:58

Bonjour

D'abord, je tiens à vous remercier d'avoir essayé de m'aider à résoudre.

Je rappelle que lors de mon premier post, j'ai notifié que le code suivant fonctionne correctement
$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$sql = "SELECT * FROM mylogs";
$stmt = $db->prepare($sql);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();
while( $row = $stmt->fetch() ){
        echo $row['id'].'-'.$row['uid'].'<br />';
}
donc la requête MySQL est correcte ainsi que la syntaxe HTML et la connexion PDO.
Mais bon, je vérifie avec des var_dump et aussi je vais tester cette fonction à d'autres sites.

à tout à l'heure

Re: fonction pdo-mysql

par moogli » 04 juin 2013, 17:18

"ma" fonction ne retourne rien qu'a deux endroit.
dans le premier il y un message qui est affiché, donc si tu ne le trouve pas c'est qu'il n'y en a pas (à moins qu'il soit mêlé a du code html, mais la du coup c'est ce que tu a avant qu'il faut vérifier avant toute chose).
Soit l'objet $db n'est pas un objet PDO. Si tu n'a pas touché a mon code c'est que tu passe null.

si c'est le cas c'est que la connexion est foireuse ?

Pour debugguer, comme indiqué dans le lien de mon message précédent tu peux utiliser print_r ou var_dump (le second de préfrence) pour afficher le contenu des variables.
tu peux aussi utiliser un ide et un debugguer (xdebug ou zend debug avec éclipse par exemple).

le code est syntaxiquement correct après le n'ai pas tes données je en peux tester.


Il est aussi possible que la requête ne retourne rien, pour en être sur test la avec un client mysql.


@+

Re: fonction pdo-mysql

par Cypher_PHP » 04 juin 2013, 16:16

Moogli

c'est ta fonction qui fait ca ;)
pour info, j'utilise les requêtes préparées

Re: fonction pdo-mysql

par moogli » 04 juin 2013, 16:07

donc tu n'a pas de résultat et au pif le premier test échoue vue que tu n'a rien d'afficher .

Merci d'effectuer un minimum de debuggage :D

@+

Re: fonction pdo-mysql

par Cypher_PHP » 04 juin 2013, 16:01

cela donne une page blanche .....

Re: fonction pdo-mysql

par ghost5922 » 04 juin 2013, 15:59

@Moogli comme deja dit j'utilise une class pour faire mes requêtes sql mais il est vrai que cela me ferai pas de mal de test PDO encore merci pour tes lumières

Re: fonction pdo-mysql

par moogli » 04 juin 2013, 15:47

il y a moyen de faire simple et clair
<?php
function select_mylogs_admin_all(PDO $db) {
    if($db != null && is_a($db,'PDO')){
        $result = $db->query('SELECT * FROM mylogs');
        if($result !== false){
            return $result->fetchAll(PDO::FETCH_ASSOC);
        }
        else {
            // traitement de l'erreur
            $err = $db->errorInfo();
            echo 'Erreur sQL : '.$err[2];
            return [];
        }
    }else {
        //traitement de l'erreur
        return [];
    }
}

$rows = select_mylogs_admin_all($db);
foreach ($rows as $row) {
    echo $row['id'].'<br />';
}
il faut ajouter une gestion correcte des erreurs.

Ceci n'est utile que si tu compte utiliser cette requête plus d'une fois.

J'ai ajouter un "double" contrôle sur le type de l'objet suivant ta version de php le premier peu poser problème :mrgreen: (typage de l'argument de la fonction).

@ghost5922 : PDO c'est natif php et une bonne pratique si tu veux faire de la POO (l'abstraction de la base de donnée est déja fait tu n'as pas besoin de le refaire).

@+

Re: fonction pdo-mysql

par ghost5922 » 04 juin 2013, 12:37

tu as pu besoin de ta boucle
$result = array();
                while( $rows = $stmt->fetchAll() ){
                                        $result[] = $rows;
                                }
                return $result;
        }
$stmt->fetchAll() te renvoi deja un tableau donc juste a return $stmt->fetchAll();

après je connais pas beaucoup cette class PDO mais il a plusieurs possibilité de sortir les données :)

donc faut juste voir comment tu veux les récupérés et ce que tu veux en faire

ps : le code que j'ai poster plus haut ne marche pas ?

Re: fonction pdo-mysql

par Cypher_PHP » 04 juin 2013, 12:29

donc si je comprend bien, pour récupérer tout le jeu de résultats, j'utilise la fonction fetchAll avec pour valeur par défaut PDO::FETCH_BOTH, c'est vien ça?
	function select_mylogs_admin_all($db){

        $sql = "SELECT * FROM mylogs";
		$stmt = $db->prepare($sql);
		$stmt->execute();

        $result = array();
		while( $rows = $stmt->fetchAll() ){
					$result[] = $rows;
				}
		return $result;
	}
$rows = select_mylogs_admin_all($db);
foreach ($rows as $row) {
    echo $row['id'];
}

Re: fonction pdo-mysql

par ghost5922 » 04 juin 2013, 12:12

Bonjour,

regarde ce lien http://php.net/manual/fr/pdostatement.fetchall.php

car pour le moment tu mélange un peu les deux

sinon test voir si cela te convient
function select_mylogs_admin_all($db){
        $sql = "SELECT * FROM mylogs";
        $stmt = $db->prepare($sql);
		$stmt->execute();
		$result = $stmt->fetchAll();
		return $result;
}

$db = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USERNAME, DB_PASSWORD,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

$rows = select_mylogs_admin_all($db);
foreach ($rows as $row) {
                echo $row['id'].'<br />';
}