Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2008, 13h24   #1
Invité de passage
 
Inscription : octobre 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 5
Points : 2
Points : 2
Par défaut Zend_Db_Select et SQLite3

Bonjour,

Je développe un site communautaire basé sur le Zend Framework. Je viens de passer de mysql à sqlite3, la base de données a été migrée, mais j'ai un étrange problème lorsque je tente de récupérer les données en faisant, par exemple :

Code :
1
2
3
4
 
$select = $db->select()
->from('news', array('id', 'titre', 'texte', 'dateajout'))
->where('news.id = 5');
J'obtiens en utilisant print_r sur le résultat :
Code :
1
2
 
Array ( ["news"."id"] => 5 ["news"."titre"] => Titre de la news ["news"."texte"] => corps de la news. ["news"."dateajout"] => 2007-12-19 19:35:55)
donc, pour afficher le titre, je dois faire $news["\"news\".\"titre\""], ce qui est très inconfortable.

Alors qu'avant, avec mysql, j'avais tout simplement comme résultat du print_r :
Code :
1
2
 
Array ( [id] => 5 [titre] => Titre de la news [texte] => corps de la news. [dateajout] => 2007-12-19 19:35:55)
Je ne vois pas comment corriger ça, avez-vous une idée ?

Merci d'avance
AzAt0th est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2008, 19h02   #2
Invité de passage
 
Inscription : octobre 2004
Messages : 5
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 5
Points : 2
Points : 2
Par défaut Le problème plus complet

Après avoir parcouru moultes documentations, j'ai compris que sqlite3 renvoie par défaut comme clé : le nom_de_la_table.nom_du_champ.

Et donc, pour empêcher cela, il faut passer comme query à sqlite :
Code :
1
2
3
 
PRAGMA full_column_names = 0;
PRAGMA short_column_names = 1;
Là, il devrait renvoyer uniquement le nom du champ comme clé.

Mais ça ne fonctionne pas pour ma requête sql. Après m'être cassé les neurones, j'ai finalement simplifié la requête en appliquant les PRAGMA et là miracle, ça fonctionne, mais dés que je veux faire une requête sur plusieurs tables avec jointure externe. Il me remet le nom de la table dans les clés du résultat.

Ci-dessous, la fonction qui exécute la requête et renvoie les résultat
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
	public function fetchAll() {
		Zend_Loader::loadClass("Zend_Db_Select");
		$db = Zend_Registry::get("dbAdapter");
		$db->query("PRAGMA full_column_names = 1");
		$db->query("PRAGMA short_column_names = 0");	
		$select = $db->select()
			->from('news', array('news.id', 'titre', 'texte', 'dateajout'))
			->from('users','username')
			->joinLeft('commentnews', 'news.id = commentnews.idnews', 'COUNT(DISTINCT commentnews.id) as nbcomments')
			->joinLeft('historique_news','news.id = historique_news.idnews',"MAX(datemaj) as datemaj")
			->group('news.id')
			->where('news.iduser = users.id')
			->order('news.dateajout DESC');
		$stmt = $db->query($select);
		$result = $stmt->fetchAll();
		return $result;
	}
La question est donc, est-ce normal ? Si oui, est-ce contournable, si non où se trouve le problème ?

Pour information, j'ai bien vérifié que les pragma étaient correct dans ma db et j'utilise la dernière version de wamp.
AzAt0th est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h50.


 
 
 
 
Partenaires

Hébergement Web