< Programmation PHP

Installation

On distingue plusieurs pilotes PHP pour MS-SQL Server :

  • mssql (désuet en PHP7).
  • sqlsrv
  • PDO

Windows

Pour se connecter au serveur MS-SQL à partir d'un tout-en-un comme EasyPHP, il suffit de télécharger les pilotes .dll[1] correspondant à sa version de PHP, puis d'indiquer leurs chemins dans le PHP.ini :

  • Sous PHP 4, copier le fichier php_mssql.dll dans les extensions.
  • Pour PHP 5.4 :
    1. Télécharger les .dll SQL30
    2. Les copier dans C:\PROGRA~2\EasyPHP\binaries\php\php_runningversion\ext
    3. Les ajouter dans C:\PROGRA~2\EasyPHP\binaries\php\php_runningversion\php.ini via les lignes suivantes[2] :
      extension=php_sqlsrv_54_ts.dll
      extension=php_pdo_sqlsrv_54_ts.dll
  • Dans PHP 5.5 on obtient toujours Fatal error: Call to undefined function sqlsrv_connect(), donc upgrader ou downgrader PHP.
  • Dans PHP 7 : cela fonctionne.

Pour vérifier l'installation, redémarrer le serveur Web, puis vérifier que la ligne pdo_sqlsrv s’est bien ajoutée dans la configuration (ex : http://127.0.0.1/home/index.php?page=php-page&display=extensions).

Linux

Pour se connecter au serveur MS-SQL, il suffit de télécharger les pilotes .so[3] correspondant à sa version de PHP, puis d'indiquer leurs chemins dans le PHP.ini[4] :

extension=php_pdo_sqlsrv_7_nts.so
extension=php_sqlsrv_7_nts.so

Pour vérifier l'installation, redémarrer le serveur Web, puis vérifier que la ligne pdo_sqlsrv s’est bien ajoutée dans la configuration (ex : php -r "phpinfo();" |grep sql).

Connexion

Pilote 1.1 SQL Server pour PHP

Ce pilote fournit des fonctions d’interaction avec Microsoft SQL Server. Il peut s'utiliser avec les version de SQL Server postérieure à 2005[5].

Principe
$serverName = "(local)";
$connectionInfo = array("login" => $uid, "password" => $pwd, "Database"=>"my_db");
$connect = sqlsrv_connect($serverName, $connectionInfo);

// ... votre script

sqlsrv_close($connect);
Fin du principe

Alternative désuète

Les fonctions suivantes sont supprimées depuis PHP 7.0[6] :

Principe

[7]

$serverName = "(local)";
$connect = mssql_connect($serverName, "login", "password");
mssql_select_db("my_db", $connect)

// ... votre script

mssql_close($connect);
Fin du principe

Alternative Doctrine

Les bibliothèques Doctrine utilisent cette syntaxe[8] :

Principe
        $config = new \Doctrine\DBAL\Configuration();
        $connectionParams = array(
            'driver'   => 'sqlsrv', // ou pdo_sqlsrv selon le pilote
            'host'     => $this->serverName,
            'dbname'   => $this->databaseName,
            'user'     => $this->userName,
            'password' => $this->password,
        );
        $this->connection = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
        $this->connection->query($query);
        $this->connection->close();
Fin du principe

Requête SQL

// ... connexion

$sql = "DELETE FROM ma_table WHERE colonne = '1' LIMIT 0,30";
if (!sqlsrv_query($connect, $sql)) {
  die (sqlsrv_errors());
}

// ... déconnexion

Récupération des données

// ... connexion

$sql = "SELECT ville, pays, code_postal FROM table_clients WHERE code_postal = '78000' AND client_id = '44' LIMIT 1";
if (!$result = sqlsrv_query($connect, $sql)) {
  die (sqlsrv_errors());
}
$client_data = sqlsrv_fetch_array($result);
extract($client_data);

echo $ville;
echo $pays;
echo $code_postal;

// ... déconnexion
Logo Par défaut, sqlsrv_fetch_array() renvoie deux tableaux imbriqués : le tableau itératif et l'associatif. Pour n'en sélectionner qu'un, il faut remplir son deuxième paramètre avec[9] :
  • SQLSRV_FETCH_ASSOC : pour le tableau associatif.
  • SQLSRV_FETCH_NUMERIC : pour le tableau itératif.
  • SQLSRV_FETCH_BOTH : pour les deux (déjà par défaut).

Références

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.