Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez ce démarrage rapide pour installer les pilotes PHP, vous connecter à Azure SQL avec votre identité Microsoft Entra, puis exécuter une requête Transact-SQL paramétrée (T-SQL) sur les données d’exempleAdventureWorksLT. Choisissez soit l’API procédurale SQLSRV, soit l’API PDO_SQLSRV. Les deux exemples lisent les paramètres de connexion des variables d’environnement et donnent le même résultat.
La requête lit les données produit et ne crée pas d’objets de base de données.
Avant de commencer
- Créez ou connectez-vous à une base de données contenant les données d’exemple
AdventureWorksLT. Pour obtenir les instructions de configuration d’Azure SQL Database, de la base de données SQL dans Microsoft Fabric, de SQL Server et des conteneurs SQL Server, voir bases de données d’exemple AdventureWorks. - Demandez à l’administrateur de la base de données de créer un utilisateur de base de données pour votre identité Microsoft Entra.
- Sous Windows, connectez-vous avec le compte Windows qui a accès à la base de données.
- Sur macOS ou Linux, obtenez un ticket Kerberos pour un compte Microsoft Entra fédéré. Pour les exigences, voir Utilisation de Microsoft Entra ID avec le pilote ODBC.
1. Installer PHP et les pilotes
Sélectionnez votre système d’exploitation. Copiez tout le bloc de commandes, collez-le dans le terminal spécifié, et exécutez-le.
Ouvrez PowerShell en tant qu’administrateur. Copiez et exécutez ce bloc :
winget install --exact --id PHP.PHP.8.5 --source winget --accept-package-agreements --accept-source-agreements
winget install --exact --id Microsoft.msodbcsql.18 --source winget --accept-package-agreements --accept-source-agreements
$env:Path = [Environment]::GetEnvironmentVariable("Path", "Machine") + ";" +
[Environment]::GetEnvironmentVariable("Path", "User")
New-Item -ItemType Directory -Force C:\php-quickstart | Out-Null
Set-Location C:\php-quickstart
$phpDirectory = Split-Path (Get-Command php.exe -ErrorAction Stop).Source
$phpIni = Join-Path $phpDirectory "php.ini"
if (-not (Test-Path $phpIni)) {
Copy-Item (Join-Path $phpDirectory "php.ini-development") $phpIni
}
$configuration = [System.IO.File]::ReadAllText($phpIni)
$configuration = $configuration -replace '(?m)^\s*;\s*extension_dir\s*=\s*"ext"\s*$', 'extension_dir = "ext"'
$configuration = $configuration -replace '(?m)^\s*;\s*extension\s*=\s*openssl\s*$', 'extension=openssl'
$configuration = $configuration -replace '(?m)^\s*;\s*extension\s*=\s*zip\s*$', 'extension=zip'
[System.IO.File]::WriteAllText($phpIni, $configuration)
Invoke-WebRequest https://github.com/php/pie/releases/latest/download/pie.phar -OutFile pie.phar
php .\pie.phar install microsoft/sqlsrv
php .\pie.phar install microsoft/pdo_sqlsrv
php --version
php --ri sqlsrv
php --ri pdo_sqlsrv
Les trois dernières commandes affichent les versions installées de PHP et d’extension. Fermez la fenêtre de l’administrateur une fois l’opération réussie.
Si l’une des php --ri commandes indique que l’extension n’est pas présente, allez dans le dépannage d’installation avant de continuer.
2. Définir les informations de connexion
Remplacez <server> et <database> dans le bloc correspondant à votre système d’exploitation. Copiez et exécutez tout le bloc dans le même terminal que vous utiliserez pour exécuter PHP.
Set-Location C:\php-quickstart
$env:SQL_SERVER = "tcp:<server>.database.windows.net,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "ActiveDirectoryIntegrated"
Important
Les deux exemples permettent le chiffrement et valident le certificat serveur. Si votre serveur utilise un certificat délivré par une autorité de certification privée (AC), installez les certificats racine et intermédiaires de l’AC émettrice dans le magasin de certificats approuvés du système d’exploitation client. Définissez SQL_SERVER sur un nom figurant dans le nom alternatif du sujet ou le nom commun du certificat. Sinon, la connexion échoue avant que la requête ne soit lancée. Pour plus d’informations, voir Chaîne de certificats non fiable et Configurer le chiffrement SQL Server.
TrustServerCertificate=true contourne la validation de l’identité du serveur. Utilisez-le uniquement pour diagnostiquer un environnement de test local isolé, et non comme configuration de confiance pour des environnements de production ou partagés.
3. Créer et exécuter un échantillon
Sélectionnez une API PHP. Créez le fichier nommé en utilisant le code dans l’onglet sélectionné, puis exécutez la commande après le code.
Créez quickstart-sqlsrv.php avec le code suivant :
<?php
declare(strict_types=1);
$server = getenv('SQL_SERVER') ?: null;
$database = getenv('SQL_DATABASE') ?: null;
$authentication = getenv('SQL_AUTHENTICATION') ?: null;
if ($server === null || $database === null || $authentication === null) {
throw new RuntimeException('Set SQL_SERVER, SQL_DATABASE, and SQL_AUTHENTICATION.');
}
if (!in_array($authentication, ['SqlPassword', 'ActiveDirectoryIntegrated', 'ActiveDirectoryMsi'], true)) {
throw new RuntimeException(
'Set SQL_AUTHENTICATION to SqlPassword, ActiveDirectoryIntegrated, or ActiveDirectoryMsi.'
);
}
$user = null;
$password = null;
if ($authentication === 'SqlPassword') {
$user = getenv('SQL_USER') ?: null;
$password = getenv('SQL_PASSWORD') ?: null;
if ($user === null || $password === null) {
throw new RuntimeException('Set SQL_USER and SQL_PASSWORD for SqlPassword authentication.');
}
}
$options = [
'Database' => $database,
'Authentication' => $authentication,
'Driver' => 'ODBC Driver 18 for SQL Server',
'Encrypt' => true,
'TrustServerCertificate' => false,
];
if ($authentication === 'SqlPassword') {
$options['UID'] = $user;
$options['PWD'] = $password;
}
$connection = sqlsrv_connect($server, $options);
if ($connection === false) {
throw new RuntimeException(print_r(sqlsrv_errors(), true));
}
$sql = <<<'SQL'
SELECT TOP (5) ProductID, Name
FROM SalesLT.Product
WHERE ProductID > ?
ORDER BY ProductID;
SQL;
$parameters = [0];
$statement = sqlsrv_query($connection, $sql, $parameters);
if ($statement === false) {
$errors = sqlsrv_errors();
sqlsrv_close($connection);
throw new RuntimeException(print_r($errors, true));
}
$rows = [];
while (($row = sqlsrv_fetch_array($statement, SQLSRV_FETCH_ASSOC)) !== null) {
if ($row === false) {
$errors = sqlsrv_errors();
sqlsrv_free_stmt($statement);
sqlsrv_close($connection);
throw new RuntimeException(print_r($errors, true));
}
$rows[] = $row;
}
sqlsrv_free_stmt($statement);
sqlsrv_close($connection);
if (count($rows) !== 5) {
throw new RuntimeException('Unexpected query result.');
}
$previousProductId = 0;
foreach ($rows as $row) {
if ($row['ProductID'] <= $previousProductId || $row['Name'] === '') {
throw new RuntimeException('Unexpected query result.');
}
$previousProductId = $row['ProductID'];
}
printf("%-12s%s\n", 'Product ID', 'Name');
printf("%-12s%s\n", '----------', '----');
foreach ($rows as $row) {
printf("%-12d%s\n", $row['ProductID'], $row['Name']);
}
Exécutez l’exemple :
php quickstart-sqlsrv.php
4. Vérifier le résultat
Les lignes de produits peuvent varier selon la version d’AdventureWorksLT. Les deux échantillons retournent une sortie qui ressemble à cet exemple :
Product ID Name
---------- ----
680 HL Road Frame - Black, 58
706 HL Road Frame - Red, 58
707 Sport-100 Helmet, Red
708 Sport-100 Helmet, Black
709 Mountain Bike Socks, M
Chaque exemple vérifie que la requête a renvoyé cinq produits avec des noms non vides et des identifiants de produit dans l’ordre croissant avant d’afficher les lignes. Il libère ensuite la déclaration et ferme la connexion. La requête ne laisse aucun objet ou donnée de la base de données à supprimer.
Utiliser une autre méthode d’authentification
Les échantillons acceptent également l’identité managée et l’authentification SQL Server sans modifier les fichiers PHP.
Identité gérée
Pour une application hébergée dans Azure, activez une identité gérée et créez son utilisateur de base de données. Définissez le serveur, la base de données et le mode d’authentification dans la configuration de l’application :
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
Ne pas définir SQL_USER ou SQL_PASSWORD.
Pour la base de données SQL dans Microsoft Fabric, accordez à l’identité la permission de lire l’objet via les contrôles d’accès Fabric. Utilisez le point de terminaison de connexion SQL de l’élément de base de données, et non le point de terminaison d’analytique SQL. La base de données SQL dans Fabric ne prend pas en charge l'authentification SQL.
Authentification de SQL Server
Utilisez l’authentification SQL Server uniquement pour une instance SQL Server que vous contrôlez, comme un conteneur local isolé de développement. Gardez vos identifiants dans la configuration de l’application ou dans un magasin secret. Ne les validez pas dans le système de gestion de code source.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Pour d’autres méthodes d’authentification Microsoft Entra, voir Connect using Microsoft Entra authentication.
Dépannage de l’installation
Utilisez ces vérifications si le bloc d’installation s’arrête ou si une commande de vérification échoue.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Si Get-Command ne trouve pas php.exe, ferme tous les terminaux, ouvre une nouvelle fenêtre PowerShell, puis relance les vérifications. Si une php --ri commande signale l’absence d’extension, relancez les commandes d’installation PIE depuis C:\php-quickstart.
Si une connexion signale FA001 et indique que l’option d’authentification ne peut pas être utilisée avec la sécurité intégrée, confirmez que SQL_AUTHENTICATION c’est exactement ActiveDirectoryIntegrated. Exécutez php --ri sqlsrv ou php --ri pdo_sqlsrv vérifiez la version du pilote PHP, et mettez à jour le pilote s’il est plus ancien que la 5.10.1.
Nettoyage
Les exemples publient leurs déclarations et ferment leurs connexions. Ils ne créent pas d’objets de base de données ni ne persistent les données.
Les paramètres de connexion s’appliquent à la session terminale en cours. Ferme le terminal quand tu as fini.
Pour les paramètres de réessai en production, de timeout, de journalisation et de basculement, utilisez la référence de production au lieu d’étendre cet échantillon de première exécution.