Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Használd ezt a gyorsindítást a PHP illesztőprogramok telepítéséhez, csatlakozz Azure SQL-hoz Microsoft Entra identitásoddal, és futtass egy paraméterezett Transact-SQL (T-SQL) lekérdezést a AdventureWorksLT mintaadatokkal. Válassz vagy az SQLSRV eljárási API-t, vagy a PDO_SQLSRV API-t. Mindkét minta a környezeti változók kapcsolati beállításait olvassa, és ugyanazt az eredményt adja.
A lekérdezés termékadatokat olvas, és nem hoz létre adatbázis-objektumokat.
Mielőtt elkezdenéd
- Hozz létre vagy csatlakoztasson egy adatbázishoz, amely tartalmazza a
AdventureWorksLTmintaadatokat. Az Azure SQL Database, SQL database in Microsoft Fabric, SQL Server és SQL Server containers beállítási utasításaiért lásd: AdventureWorks sample databases. - Kérd meg az adatbázis-adminisztrátort, hogy hozzon létre egy adatbázis-felhasználót a Microsoft Entra identitásodhoz.
- Windows-on jelentkezz be azzal a Windows fiókkal, amely adatbázishoz hozzáfér.
- macOS-en vagy Linuxon szerezz egy Kerberos jegyet egy szövetséges Microsoft Entra fiókhoz. A követelményekkel kapcsolatban lásd: A Microsoft Entra ID használata az ODBC-illesztővel.
1. Telepítsd a PHP-t és a drivereket
Válassza ki az operációs rendszert. Másold le az egész parancsblokkot, illeszted be a megadott terminálba, és futtatd le.
Nyissa meg a PowerShellt rendszergazdaként. Másold és futtatd ezt a blokkot:
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
Az utolsó három parancs megjeleníti a telepített PHP és bővítmény verziókat. Zárd be a rendszergazdai ablakot, miután sikerrel jártak.
Ha bármelyik php --ri parancs azt jelenti, hogy a bővítmény nincs jelen, menj a Telepítés hibakeresés részébe, mielőtt folytatnád.
2. Állítsd be a kapcsolati információkat
Cseréld le a(z) <server> és <database> elemeket az operációs rendszeredhez tartozó blokkban. Másold le és futtasd az egész blokkot ugyanazon a terminálon, amit a PHP-hez használsz.
Set-Location C:\php-quickstart
$env:SQL_SERVER = "tcp:<server>.database.windows.net,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "ActiveDirectoryIntegrated"
Important
Mindkét minta lehetővé teszi a titkosítást és validálja a szerver tanúsítványt. Ha a szervered egy privát tanúsítvány (CA) tanúsítványt használ, telepítse a kiadó root és köztes CA tanúsítványokat az ügyfél operációs rendszer bizalmi tárolójában. Állítsd a(z) SQL_SERVER értékét a tanúsítvány Subject Alternative Name vagy Common Name mezőjében szereplő névre. Ellenkező esetben a kapcsolat meghibásodik, mielőtt a lekérdezés elindulna. További információért lásd: Tanúsítványlánc nem megbízható, illetve az SQL Server titkosítás konfigurálása.
TrustServerCertificate=true megkerüli a szerverazonosító ellenőrzést. Csak egy izolált helyi tesztkörnyezet diagnosztizálására használjuk, nem pedig bizalmi konfigurációként gyártási vagy megosztott környezetekhez.
3. Készíts és futtass mintát
Válassz egy PHP API-t. Hozza létre a megadott nevű fájlt a kiválasztott lapon található kód használatával, majd futtassa a kód után következő parancsot.
Hozzon létre quickstart-sqlsrv.php a következő kóddal:
<?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']);
}
Minta futtatása:
php quickstart-sqlsrv.php
4. Ellenőrizd az eredményt
A terméksorok az AdventureWorksLT verziótól függően változhatnak. Mindkét minta hasonló kimenetet ad vissza:
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
Minden minta ellenőrzi, hogy a lekérdezés öt terméket adott vissza, amelyek nem üres nevekkel és növekvő termékazonosítókkal rendelkeznek, mielőtt kinyomtatná a sorokat. Ezután kiadja a nyilatkozatot, és lezárja a kapcsolatot. A lekérdezés nem hagy eltávolítandó adatbázis-objektumokat vagy adatokat.
Használj másik hitelesítési módszert
A minták kezelt identitást és SQL Server hitelesítést is elfogadnak anélkül, hogy megváltoztatnák a PHP fájlokat.
Felügyelt identitás
Egy Azure-ban üzemeltetett alkalmazás esetén engedélyezze a felügyelt identitást, és hozza létre az adatbázis-felhasználóját. Állítsd be a szervert, adatbázist és hitelesítési módot az alkalmazás konfigurációjában:
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
Ne állítsa be SQL_USER vagy SQL_PASSWORD.
A Microsoft Fabric SQL-adatbázisához adja meg az identitás számára a Read elemszintű engedélyt a Fabric access controls használatával. Használd az adatbázis tárgyának SQL kapcsolati végpontját, ne az SQL analitikai végpontot. Az SQL adatbázis a Fabric-ben nem támogatja az SQL hitelesítést.
SQL Server hitelesítés
Az SQL Server hitelesítést csak egy olyan SQL Server példányhoz használd, amit te irányítasz, például egy izolált helyi fejlesztő konténerben. Tartsd a hitelesítő adatokat alkalmazáskonfigurációban vagy titkos tárolóban. Ne kötelezd őket a forráskontrollra.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Más Microsoft Entra hitelesítési módszerekért lásd: Kapcsolódj Microsoft Entra hitelesítéssel.
Telepítési hibakeresés
Használd ezeket a próbákat, ha a telepítési blokk megáll vagy egy ellenőrző parancs meghibásodik.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Ha a(z) Get-Command nem találja a(z) php.exe-t, zárj be minden terminált, nyiss meg egy új PowerShell-ablakot, majd futtasd újra az ellenőrzéseket. Ha egy php --ri parancs jelzi, hogy a Extension nincs jelen, indítsd újra a PIE telepítési parancsokat .C:\php-quickstart
Ha egy kapcsolat FA001 hibát jelez, és azt írja, hogy a Hitelesítés lehetőség nem használható az Integrált biztonsággal, ellenőrizd, hogy a(z) ActiveDirectoryIntegrated pontosan SQL_AUTHENTICATION. Futtasd a php --ri sqlsrv vagy a php --ri pdo_sqlsrv parancsot a PHP-illesztőprogram verziójának ellenőrzéséhez, és frissítsd az illesztőprogramot, ha az 5.10.1-nél régebbi.
Takarítás
A minták kiadják a nyilatkozataikat és megszüntetik a kapcsolataikat. Nem hoznak létre adatbázis-objektumokat vagy nem tárolnak adatokat.
A kapcsolati beállítások a jelenlegi terminál ülésre vonatkoznak. Zárd be a terminált, ha végeztél.
Gyártási újrapróbálás, időkorlát, naplózás és failover beállítások esetén használd a gyártási alapvonalat ahelyett, hogy ezt az első futtatási mintát hosszabbítanád.