Developpez.com - Zend Framework
X

Choisissez d'abord la catégorieensuite la rubrique :


Configurer la connexion à SQL Server 2008 Express avec Zend

Date de publication : 05/10/2010 , Date de mise à jour : 21/01/2011

Par VAUDIN Michael
 Olivier Van Hoof (ovh) (Mes autres articles)
 


               Version PDF   Version hors-ligne

0. Prérequis
I. Installation du dit driver
II. Connexion à la base de données avec le driver natif
III. Connexion avec Zend_Db_Table en utilisant le driver PDO


0. Prérequis

Tout d'abord, il faut télécharger le driver PHP pour SQL SERVER 2008 à cette adresse : Driver SQLSRV2.0


Il faut aussi avoir Wamp (version2.0i) ou un autre server d'installé, ainsi que Zend configuré comme décrit dans mon autre tuto (« Installer le framework Zend en 15 minutes »).

Il vous faut également l'un des systèmes suivants :

On peut maintenant passer à la suite.


I. Installation du dit driver

Double cliquez sur le fichier téléchargé plus tôt : « SQLSRV2.0.EXE », vous devriez voir :

image
Cliquez sur « Yes », choisissez ensuite le répertoire d'extraction des fichiers :

image
image
Les fichiers ont été extraits dans C:\wamp\bin\php\php5.3.0\ext


Quittez Wamp (click droit exit) :

image

Relancez Wamp, puis faites un click gauche sur l'icône, et allez dans PHP PHP Extensions,

Vous devriez voir l'image suivante :

(quelques extensions ne seront pas cochées chez vous, c'est normal)

image
Vous avez maintenant le choix entre 6 nouvelles extensions :

52 et 53 correspondent à la version de PHP que l'on utilise, c'est-à-dire 5.3.0 dans ce tutoriel ; les extensions (1) et (2) fonctionnant avec la version 5.2.* de PHP, elles ne nous intéresseront donc pas ici.


Si le nom du fichier pilote contient « vc9 », il doit être utilisé avec une version de PHP compilée avec Visual C++ 9.0. S'il contient « vc6 », il doit être utilisé avec une version de PHP compilée avec Visual C++ 6.0.


Nous utilisons une version de PHP compilée avec Visual C++ 6.0, les extensions (5) et (6) ne sont donc pas pour nous.


Il ne reste que les extensions (3) et (4) qui sont respectivement « non thread safe » et « thread safe », le choix entre ces extensions dépend de la .dll PHP qui est présente dans le dossier : C:\wamp\bin\php\php5.3.0

image
Personnellement, j'ai le fichier php5ts.dll, j'ai donc choisi la version thread-safe (4) (si vous avez le fichier php5.dll, l'extension (3) est faite pour vous !).


Cliquez donc une fois sur la ligne « php_sqlsrv_53_ts_vc6 », attendez quelques secondes, puis cliquez sur « Restart All Services ».

image
Vous devriez maintenant voir image à gauche de la ligne, ça signifie que l'extension est lancée.


Lancez maintenant votre IDE préféré pour tester la connexion à votre base de données


II. Connexion à la base de données avec le driver natif

Une fois votre IDE lancé, vous avez 2 possibilités pour vous connecter :

Allez dans le fichier « application.ini », qui se trouve dans le dossier Application/configs de votre projet et tapez les lignes suivantes :

image

En remplaçant bien sûr le nom d'hôte (ASTYAN-PC\SQLEXPRESS) par le nom de votre PC ou une adresse ip suivie de  « \SQLEXPRESS » si vous êtes sous SQL SERVER 2008 EXPRESS, sinon mettez le nom du moteur après le « \ »

ex : ASTYAN-PC\EXPRESS2008R2


Testez ensuite la connexion à la base de données en utilisant votre DbTable

Ex : DbTable Medecin

$_name représente le nom de la table (ici Medecin)

image

Je n'entrerai pas plus dans les détails de ce côté la (ce n'est pas un tuto de zend ).


Dans n'importe quelle page php de votre projet, tapez ceci (en modifiant ASTYAN-PC par votre base de données) :

<?php
$config=array(
    'Database'=>'nomdelabase',
    'UID'=>'logindelabase',
    'PWD'=>'motdepassedelabase'
);
$connect=sqlsrv_connect('ASTYAN-PC\SQLEXPRESS',$config);
?>

Et voila vous êtes connectés, vous pouvez ensuite effectuer une requête comme ceci :

<?php

$result=sqlsrv_query($connect,'SELECT * FROM matable');
while($row=sqlsrv_fetch_array($result))
{
    echo $row['nomcolonnedematable'];
}

?>

III. Connexion avec Zend_Db_Table en utilisant le driver PDO

PDO est la manière moderne de s'adresser aux bases données en PHP depuis la version 5, en offrant une couche orientée objet standard commune à tous les moteurs de bases de données. D'ailleurs beaucoup de bibliothèques de bases de données de haut niveau s'appuient dessus. Pour plus d'informations je vous invite à lire l'excellent article comprendre PDO.

Pour utiliser une base de données SQL Server via PDO, Zend Framework propose la classe Zend_Db_Adapter_Pdo_Mssql. Malheureusement celle-ci s'appuie sur un ancien driver PDO. Pour utiliser le nouveau driver PDO de Microsoft, il suffit de modifier la manière de se connecter au driver natif. En lisant la documentation on peut lire que la chaîne de connexion (DSN) doit être au format suivant : sqlsrv:server=(local);Database=mabase. "(local)" est une syntaxe particulière qui remplace localhost, tout autre serveur s'écrit normalement, par exemple : sqlsrv:server=192.168.1.2;Database=mabase. Sachant cela, nous pouvons dériver la classe Zend_Db_Adapter_Pdo_Mssql et surcharger la méthode _dsn() qui se charge de construire la chaîne de connexion PDO.
library/Application/PDO/SqlSrv.php

class Application_PDO_SqlSrv extends Zend_Db_Adapter_Pdo_Mssql {
    /**
     * PDO type.
     *
     * @var string
     */
    protected $_pdoType = 'sqlsrv';
    
    /**
     * Creates a PDO DSN for the adapter from $this->_config settings.
     *
     * @return string
     */
    protected function _dsn()
    {
        // baseline of DSN parts
        $params = $this->_config;
        $dsn = 'sqlsrv:server=';
        if (isset($params['host'])) {
            $dsn .= $params['host'];
        }

        $dsn = str_ireplace('localhost', '(local)', $dsn);

        if (isset($params['port']) && !empty($params['port'])) {
            $dsn .= ',' . $params['port'];
        }
        if (isset($params['dbname']) && !empty($params['dbname'])) {
            $dsn .= ';Database=' . $params['dbname'];
        }
        
        return $dsn;
    }
}
Il faut aussi changer l'attribut $_pdoType qui doit correspondre au nom système du driver utilisé : "pdo_sqlsrv" devient donc "sqlsrv".

Pour utiliser automatiquement notre nouvel adaptateur, il suffit de préciser le namespace dans le fichier de configuration application/configs/application.ini :
application/configs/application.ini

resources.db.adapter                               = "pdo_sqlsrv"
resources.db.params.adapterNamespace               = "Application"
resources.db.params.host                           = "localhost\SQLEXPRESS"
resources.db.params.username                       = "admin"
resources.db.params.password                       = "motDePasse"
resources.db.params.dbname                         = "nomBase"
Comme vous pouvez le constater, la configuration ne change qu'à 2 endroits par rapport à la version précédente : le nom de l'adaptateur (pdo_sqlsrv) et le namespace pour utiliser notre classe. Cela suffit à Zend Framework pour retrouver notre classe dans library/Application/PDO/SqlSrv.php.

On peut dès lors tester avec une classe modèle toute simple :
application/models/Users.php

class Application_Model_Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'Users';
    protected $_primary = array('id');
}
Et le test est tout aussi trivial :

$users = new Application_Model_Users();
Zend_Debug::dump($users->fetchAll());
Ce bout de code affiche tous les enregistrements de la table users.



               Version PDF   Version hors-ligne

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2010 Astyan. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Contacter le responsable de la rubrique Zend Framework