Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-08-2012 16:12:00

christophepradel
Nouveau membre
Date d'inscription: 21-08-2012
Messages: 3

[Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

Bonjour à tous.
Je suis novice en zend, mais je pense avoir réussi à établir une plateforme de développement clean :
- Windows 7 Pro
- Apache 2.2
- Zend Framework 1.11.12
- Microsorft SQL Server 2008 R2
- PHP 5.3.16
- Drivers natif pour PHP php_sqlsrv_53_ts_vc9.dll et php_pdo_sqlsrv_53_ts_vc9.dll

J'ai des soucis pour utiliser une base SQL dans laquelle j'ai des Noms de Table et des Noms de champs contenant des Accents. Mon premier test s'est porté sur une Table Adherent ayant un champ Adh_Création (date de création).

Pour faire un test rapide, je me suis positionné dans mon controleur index par défaut et j'exécute les instructions suivantes :

        $options = array(
            Zend_db::AUTO_QUOTE_IDENTIFIERS => true
        );
       
        $params = array(
            'host'     => '<mon serveur>',
            'dbname'   => '<ma base>',
            'username' => 'xx',
            'password' => 'xxxx',
            'charset' => 'utf8',
            'options' => $options             
        );   
       
        $db = Zend_Db::factory('sqlsrv', $params);

        $sql = 'SELECT TOP 10 Adh_Création FROM Adherent';
       
        $result = $db->fetchAll($sql, 2);

        foreach ($result as $row) {
          $Creation = $row['Adh_Création'];
          echo $Creation;
        }

Premier constat : avec l'adapter sqlsrv, je récupère une exception dès l'exécution de la requête :
[Microsoft][SQL Server Native Client 10.0][SQL Server]Syntaxe incorrecte vers '�'.

Deuxième constat : si j'opte pour l'adapter pdo_sqlsrv, la requête s'exécute correctement, mais j'obtiens une erreur lors de la manipulation de $row :
    Notice: Undefined index: Adh_Création in     C:\Developpement\Apache\htdocs\quickstart\application\controllers\IndexController.php

En y regardant de plus près en debug, je vois bien mon array row rempli avec [Adh_Création] = xxxx
Or la lecture dans ce tableau associatif par $row['Adh_Création'] échoue.

Je suppose que c'est parce que le "é" remonté via le driver n'est pas codé comme le "é" que j'ai dans mon code source.

J'ai tenté pas mal de chose concernant le charset, mais sans succès
Les options AUTO_QUOTE_IDENTIFIERS et charset semblent inopérantes.

Voilà, vous savez tout.

Si quelqu'un pouvait me faire part de son expérience avec Zend et SQL Server ou m'aider à trouver de nouvelles pisztes de résolution, se serait sympa.

Hors ligne

 

#2 23-08-2012 17:42:11

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

bonjour,
ZF ne peut pas se connecter nativement avec SQL Server d'où l'erreur [Microsoft][SQL Server Native Client 10.0][SQL Server].Pour se connecter sur SQL Server il faut passer par PDO. Pour votre boucle qui ne peut pas parcourir votre tableau il me semble que fetch renvoie un tableau d'objets($row->Adh_Création ).

je serai bien curieux de savoir pourquoi vos noms de tables ou colonnes doivent-ils êtres accentués bien sûr que ça rien avoir avec les erreurs rencontrées?

Hors ligne

 

#3 23-08-2012 17:46:59

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

en récupérant un tableau au lieu d'un tableau de tableau si votre boucle ne marche toujours pas on aimerait bien voir votre debug car à priori y a aucune raison que ça ne marche.

Hors ligne

 

#4 23-08-2012 19:58:29

christophepradel
Nouveau membre
Date d'inscription: 21-08-2012
Messages: 3

Re: [Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

Merci pour ces premiers retours.
1/ Pour la connexion native SQL Server, c'est possible avec ou sans PDO (si ce n'est la pb des accents) : adapter sqlsrv ou pdo_sqlsrv
2/ J'ai essayé l'accès par objet. pas mieux. En plus je vois bien l'array en debug
3/ Le pb est bien dû aux accents, touts les requêtes sur des champs sas accents fonctionnent correctement. Quant à savoir pourquoi il y a des accents dasn les nom de champs, je dirai juste que je suis français et que ce n'est pas interdit en SQL server
4/ Le débug affiche bien mon tableau avec une entrée
[Adh_Création]
Par contre, si je le sort aev un var_dump($row), ça affiche
array(1) { 'Adh_Cr�ation' => string(23) "1989-06-09 00:00:00.000" }

Hors ligne

 

#5 24-08-2012 13:41:27

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

pour être plus précis je voulais dire que les caractères accentués sur les colonnes incriminées ne devraient à priori pas poser de problème de connexion. En revanche sans passer par PDO il est impossible  à l'adapter de Zend_Db de pouvoir se connecter nativement(à l'exception de mysql, oracle, DB2,Firebird)  sur sql server.

Concernant la colonne (Adh_Création) qui ne s'affiche pas c'est bien sûr un charset qui pose problème.La colonne Adh_Création a-t-elle la même collation que le charset définit au niveau de l'adapter(vous avez mis utf8)?essayez plutôt de supprimer cette colonne puis en récréer avec la bonne collation correspondant au charset de l'adapter.

Dernière modification par amiss (24-08-2012 13:42:11)

Hors ligne

 

#6 24-08-2012 17:47:13

christophepradel
Nouveau membre
Date d'inscription: 21-08-2012
Messages: 3

Re: [Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

Il s'agit peut être effectivement d'un problème de charset. Collation French_CI_AS côté SQL server.
Par contre, les accents contenues dasn les données de ma table sont bien extraits et restitués dans Zend sans altération.

Concernant la connexion native sans PDO, j'y arrive grace à l'unité Zend/Db/Adapter/SqlSrv.php qui définir une classe

class Zend_Db_Adapter_Sqlsrv extends Zend_Db_Adapter_Abstract

Peut-être est-ce une évolution récente.

Je ne peux pas me permettre de changer le charset de la base SQL Server. Elle est utilisée par ailleurs et c'est mon appli Web qui doit s'adapter.

Finalement, en attendant de trouver mieux, j'ai créé une vue dasn SQL Server de ma table adhérent en définissant des alias pour tous les champs accentués.

Ceci a résolu mon pb et ne devrait pas être trop couteux en temps d'exécution côté SQL server

PS : j'ai fait un test similaire avec Symfony (qui utilise PDO) et j'ai constaté le même problème avec les champs accentués.

Hors ligne

 

#7 27-08-2012 12:32:19

amiss
Membre
Lieu: Cesson-Sévigné
Date d'inscription: 08-05-2011
Messages: 115

Re: [Zend_Db_Adapter][ZF 1.11.12] Pb accès champs accentués / SQL Server

bonne nouvelle .Pour ce qui est de la connexion native de SQL Server vous avez parfaitement raison car moi je me fiais à la doc de Zend(qui est obsolète) qui n'en faisait pas état et c'est l'API de Zend qui en parle.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages