[RESOLU] Problème extraction données bdd

Eléphanteau du PHP | 26 Messages

20 déc. 2016, 00:49

Bonjour,
Je me suis aventurée dans la POO en PHP, j'ai donc créer des classes pour gérer les bdd, mais je viens de me rendre compte que lorsque je récupère des données il me les envoie en deux fois cet-à dire qu'au lieu de faire un array

array(2) { ["id"]=> string(1) "1" ["page"]=> string(7) "accueil" }

il va me faire :

array(4) {["id"]=>string(1)"1" [0]=>string(1)"1" ["page"]=> string(7) "accueil" [1]=> string(7) "accueil"}

Il double le nombre de données je ne comprend pas pourquoi voici le code :

class db
{
public static function query($req)
 	{
 				
 		$db = dbconnect::getdb();
 		
 		$q = $db->query($req);
 		
 		$donnees = $q->fetch();
 			
 		$reponse[] = $donnees;
 		 		
 		return $donnees;
 		
 	}
}


Et voici le fichier qui appel
$req = "SELECT * FROM page WHERE page='accueil'";

$donnees = db::query($req);

Voici la classe dbconnect:
class dbconnect
 {
 	

 	
 	private static function setdb()
 	{

          //== Récupération des données dans un fichier texte ==
	 	$data = data::get('sql.txt');
	 
         //== Transformation du tableau en plusieurs variables
	 	$dbhost = trim($data[0]);
	 	$dbname = rtrim($data[1]);
	 	$dbid = rtrim($data[2]);
	 	$dbmdp = rtrim($data[3]);
	 	
	 	
	 	
 	//== Assemblage requete de connexion à la base de données ==
 		$req = 'mysql:host='.$dbhost.';dbname='.$dbname;
 		
 	//== Procédure de connexion à la base de données ==
		try
		{
			$db = new PDO($req,$dbid,$dbmdp);
		}
		catch (Exception $e)
		{
		        die('Erreur : ' . $e->getMessage());
		}
		
	//== Renvoie de la variable $db ==
 		return $db;
 	}
 	
 	public static function getdb()
 	{
         //== Appel fonction statique de connexion à la db
 		$db = self::setdb();
 	//== Renvoie de $db
 		return $db;
 	}
}


Merci de votre aide
Modifié en dernier par mineyou le 20 déc. 2016, 00:57, modifié 1 fois.

ViPHP
ViPHP | 928 Messages

20 déc. 2016, 00:53

Il faut que tu passes PDO::FETCH_ASSOC comme paramètre pour qu'il ne te retourne que les valeurs indexées par leur nom.

Tu peux le faire automatiquement pour toutes requêtes si tu fais ça lorsque tu créé ta connexion :
$db = new PDO($req, $dbid, $dbmdp);
$db ->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
http://php.net/manual/fr/pdostatement.fetch.php

Eléphanteau du PHP | 26 Messages

20 déc. 2016, 01:02

C'est bon ca fonction mais du coup ca fait planter une autre class je vais essaye de régler le problème =)
Merci

Eléphanteau du PHP | 26 Messages

20 déc. 2016, 01:07

Finalement j'ai pas réussi à déplanter :

Il me donne ce code erreur :

Fatal error: Cannot use object of type stdClass as array in /home/vsftpd/moodle_3ooe/moodle_3ooe/cms/core/class/head.class.php on line 51

Je comprend pas vraiment
Modifié en dernier par mineyou le 20 déc. 2016, 01:14, modifié 1 fois.

Eléphanteau du PHP | 26 Messages

20 déc. 2016, 01:08

Voici le code php de la classe en question :
static private function getparam($page,$home)
 	{
 		
 		if(empty($page))
 		{
 			$req = "SELECT * FROM page WHERE home='true'";
 		}
 		else
 		{
 		$req = "SELECT * FROM page WHERE page='".$page."'";
 		}
 		
 		$donnees = db::query($req);
 		if($donnees === true)
 		{
 		return $donnees;
 		}
 		else
 		{
 			$req = "SELECT * FROM page WHERE page='404'";
 			$donnees = db::query($req);
 			return $donnees;
 		}
 	}

 	static public function disphead($page)
 	{
 		
 		$donnees = self::getparam($page,$home);
 		
 	
 	echo"<!Doctype html>
 		<html lang='".$donnees['lang']."'>
 		<head>
 		<title>".ucfirst($donnees['page'])."</title>
 		<meta charset='".$donnees['charset']."'/>
 		<meta name='description' content='".$donnees['description']."'/>
 		<meta name='keyword' content='".$donnees['keyword']."'/>
 		</head>";
 		
 		return $donnees['page'];
 		
 		
 	}

ViPHP
ViPHP | 928 Messages

20 déc. 2016, 02:52

Oups remplace FETCH_OBJ par FETCH_ASSOC dans le code que je t'ai filé, désolé !

Eléphanteau du PHP | 26 Messages

20 déc. 2016, 14:01

C'est pas grave c'est déjà gentil de m'aider.
Ça fonction, merci de ton aide !