Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
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
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
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
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
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
Pages: 1