Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik deze quickstart om de PHP-drivers te installeren, verbind met Azure SQL met je Microsoft Entra identiteit en voer een geparametriseerde Transact-SQL (T-SQL) query uit op de AdventureWorksLT voorbeeldgegevens. Kies ofwel de SQLSRV procedurele API of de PDO_SQLSRV API. Beide samples lezen verbindingsinstellingen uit omgevingsvariabelen en geven hetzelfde resultaat terug.
De query leest productgegevens en maakt geen databaseobjecten aan.
Voordat u van start gaat
- Maak een database aan of maak verbinding met de
AdventureWorksLTvoorbeeldgegevens. Voor installatie-instructies voor Azure SQL Database, SQL-database in Microsoft Fabric, SQL Server en SQL Server-containers, zie AdventureWorks voorbeelddatabases. - Vraag de databasebeheerder om een databasegebruiker aan te maken voor je Microsoft Entra-identiteit.
- Op Windows log je in met het Windows-account dat database-toegang heeft.
- Op macOS of Linux kun je een Kerberos-ticket aanvragen voor een gefedereerd Microsoft Entra-account. Voor vereisten, zie Gebruik van Microsoft Entra ID met de ODBC-driver.
1. Installeer PHP en de drivers
Selecteer uw besturingssysteem. Kopieer het hele commandoblok, plak het in de opgegeven terminal en voer het uit.
Open PowerShell met beheerdersrechten. Kopieer en voer dit blok uit:
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
De laatste drie commando's tonen de geïnstalleerde PHP- en extensieversies. Sluit het beheerdersvenster nadat dit is gelukt.
Als een van beide php --ri commando's meldt dat de extensie niet aanwezig is, ga dan eerst naar Installatie-probleemoplossing voordat je doorgaat.
2. Stel de verbindingsinformatie in
Vervang <server> en <database> in het blok voor je besturingssysteem. Kopieer en voer het hele blok uit in dezelfde terminal die je gebruikt om PHP te draaien.
Set-Location C:\php-quickstart
$env:SQL_SERVER = "tcp:<server>.database.windows.net,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "ActiveDirectoryIntegrated"
Important
Beide voorbeelden maken encryptie mogelijk en valideren het servercertificaat. Als je server een certificaat gebruikt van een private certificate authority (CA), installeer dan de uitgevende root- en tussenliggende CA-certificaten in de trustopslag van het client besturingssysteem. Stel SQL_SERVER in op een naam in de Subject Alternative Name of Common Name van het certificaat. Anders faalt de verbinding voordat de query wordt uitgevoerd. Voor meer informatie, zie Certificaatketen niet vertrouwd en Configureer SQL Server-encryptie.
TrustServerCertificate=true Omzeilt validatie van serveridentiteit. Gebruik het alleen om een geïsoleerde lokale testomgeving te diagnosticeren, niet als vertrouwensconfiguratie voor productie- of gedeelde omgevingen.
3. Maak een voorbeeld aan en voer het uit
Selecteer één PHP-API. Maak het benoemde bestand aan door de code in het geselecteerde tabblad te gebruiken en voer vervolgens het commando na de code uit.
Maak quickstart-sqlsrv.php met de volgende code:
<?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']);
}
Voer het voorbeeld uit:
php quickstart-sqlsrv.php
4. Controleer het resultaat
De productrijen kunnen variëren per AdventureWorksLT-versie. Beide samples geven output die lijkt op dit voorbeeld:
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
Elke sample controleert of de query vijf producten met niet-lege namen en oplopende product-ID's teruggeeft voordat de rijen worden geprint. Daarna wordt de verklaring vrijgegeven en de verbinding gesloten. De query laat geen databaseobjecten of data achter om te verwijderen.
Gebruik een andere authenticatiemethode
De voorbeelden accepteren ook beheerde identiteit en SQL Server-authenticatie zonder de PHP-bestanden te wijzigen.
Beheerde identiteit
Voor een applicatie die in Azure wordt gehost, schakel een beheerde identiteit in en maak de databasegebruiker aan. Stel de server, database en authenticatiemodus in in de configuratie van de applicatie:
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
Stel SQL_USER of SQL_PASSWORD niet in.
Voor een SQL-database in Microsoft Fabric verleen de identiteit Read item-toestemming via Fabric-toegangscontroles. Gebruik het SQL-verbindingseindpunt van het databaseitem, niet het SQL-analyse-endpoint. De SQL-database in Fabric ondersteunt geen SQL-authenticatie.
SQL Server-authenticatie
Gebruik SQL Server-authenticatie alleen voor een SQL Server-instantie die je beheert, zoals een geïsoleerde lokale ontwikkelcontainer. Bewaar inloggegevens in de applicatieconfiguratie of een geheime opslag. Verbind ze niet aan source control.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Voor andere Microsoft Entra-authenticatiemethoden, zie Connect using Microsoft Entra authentication.
Probleemoplossing voor installatie
Gebruik deze controles als het installatieblok stopt of een verificatiecommando faalt.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Als Get-Commandphp.exe niet kan vinden, sluit dan alle terminals, open een nieuw PowerShell-venster en voer de controles opnieuw uit. Als een php --ri commando meldt dat Extension niet aanwezig is, voer dan de PIE-installatiecommando's opnieuw uit vanaf C:\php-quickstart.
Als een verbinding meldt FA001 en zegt dat de authenticatieoptie niet gebruikt kan worden met Integrated Security, bevestig dan dat dat SQL_AUTHENTICATION precies ActiveDirectoryIntegratedzo is. Voer php --ri sqlsrv of php --ri pdo_sqlsrv uit om de versie van het PHP-stuurprogramma te controleren, en werk het stuurprogramma bij als deze ouder is dan 5.10.1.
Schoonmaken
De voorbeelden voeren hun instructies uit en sluiten hun verbindingen af. Ze maken geen databaseobjecten aan en behouden geen data.
De verbindingsinstellingen zijn van toepassing op de huidige terminalsessie. Sluit de terminal als je klaar bent.
Voor instellingen voor retries in productie, time-outs, logging en failover gebruik je de productiebasisconfiguratie in plaats van dit voorbeeld voor de eerste uitvoering uit te breiden.