Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Gunakan quickstart ini untuk menginstal driver PHP, terhubung ke Azure SQL dengan identitas Microsoft Entra Anda, dan jalankan query Transact-SQL berparameter (T-SQL) terhadap AdventureWorksLT data contoh. Pilih API prosedural SQLSRV atau API PDO_SQLSRV. Kedua sampel membaca pengaturan koneksi dari variabel lingkungan dan menghasilkan hasil yang sama.
Kueri membaca data produk dan tidak membuat objek basis data.
Sebelum Anda mulai
- Buat atau hubungkan ke database yang berisi
AdventureWorksLTdata sampel. Untuk instruksi pengaturan Azure SQL Database, database SQL di Microsoft Fabric, SQL Server, dan kontainer SQL Server, lihat contoh database AdventureWorks. - Minta administrator database untuk membuat pengguna database untuk identitas Microsoft Entra Anda.
- Di Windows, masuk dengan akun Windows yang memiliki akses database.
- Di macOS atau Linux, dapatkan tiket Kerberos untuk akun Microsoft Entra federasi. Untuk persyaratan, lihat Menggunakan Microsoft Entra ID dengan Driver ODBC.
1. Instal PHP dan driver
Pilih sistem operasi Anda. Salin seluruh blok perintah, tempelkan ke terminal yang ditentukan, lalu jalankan.
Buka PowerShell sebagai administrator. Salin dan jalankan blok ini:
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
Tiga perintah terakhir menampilkan versi PHP dan ekstensi yang terpasang. Tutup jendela administrator setelah mereka berhasil.
Jika salah satu php --ri perintah melaporkan bahwa ekstensi tidak ada, buka Pemecahan Masalah Instalasi sebelum melanjutkan.
2. Atur informasi koneksi
Ganti <server> dan <database> di dalam blok untuk sistem operasi Anda. Salin dan jalankan seluruh blok di terminal yang sama yang akan Anda gunakan untuk menjalankan PHP.
Set-Location C:\php-quickstart
$env:SQL_SERVER = "tcp:<server>.database.windows.net,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "ActiveDirectoryIntegrated"
Important
Kedua sampel mengaktifkan enkripsi dan memvalidasi sertifikat server. Jika server Anda menggunakan sertifikat dari otoritas sertifikat privat (CA), instal sertifikat CA root dan CA perantara penerbit di penyimpanan kepercayaan sistem operasi klien. Atur SQL_SERVER menjadi nama yang tercantum dalam Subject Alternative Name atau Common Name sertifikat. Jika tidak, koneksi gagal sebelum kueri dijalankan. Untuk informasi lebih lanjut, lihat Certificate chain not trusted dan Configure SQL Server encryption.
TrustServerCertificate=true melewati validasi identitas server. Gunakan hanya untuk mendiagnosis lingkungan uji lokal yang terisolasi, bukan sebagai konfigurasi kepercayaan untuk lingkungan produksi atau bersama.
3. Buat dan jalankan contoh
Pilih satu API PHP. Buat file bernama dengan menggunakan kode di tab yang dipilih, lalu jalankan perintah setelah kode tersebut.
Buat quickstart-sqlsrv.php dengan kode berikut:
<?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']);
}
Jalankan sampel:
php quickstart-sqlsrv.php
4. Verifikasi hasilnya
Baris produk dapat bervariasi menurut versi AdventureWorksLT. Kedua sampel mengembalikan output yang mirip dengan contoh ini:
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
Setiap contoh memeriksa bahwa kueri mengembalikan lima produk dengan nama yang tidak kosong dan ID produk yang naik sebelum mencetak baris-baris tersebut. Kemudian ia melepaskan pernyataan dan menutup koneksi. Query tidak meninggalkan objek atau data database apa pun untuk dihapus.
Gunakan metode autentikasi lain
Contoh juga menerima identitas terkelola dan autentikasi SQL Server tanpa mengubah file PHP.
Identitas yang dikelola
Untuk aplikasi yang dihosting di Azure, aktifkan identitas terkelola dan buat pengguna database-nya. Atur mode server, database, dan autentikasi dalam konfigurasi aplikasi:
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
Jangan atur SQL_USER atau SQL_PASSWORD.
Untuk database SQL di Microsoft Fabric, berikan izin item Baca identitas melalui kontrol akses Fabric. Gunakan endpoint koneksi SQL dari item basis data, bukan endpoint analitik SQL. Database SQL di Fabric tidak mendukung autentikasi SQL.
autentikasi SQL Server
Gunakan autentikasi SQL Server hanya untuk instance SQL Server yang Anda kendalikan, seperti kontainer pengembangan lokal yang terisolasi. Simpan kredensial dalam konfigurasi aplikasi atau penyimpanan rahasia. Jangan komitmenkan mereka ke kontrol sumber.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Untuk metode autentikasi Microsoft Entra lainnya, lihat Hubungkan menggunakan autentikasi Microsoft Entra.
Pemecahan masalah instalasi
Gunakan pemeriksaan ini jika blok instalasi berhenti atau perintah verifikasi gagal.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Jika Get-Command tidak menemukan php.exe, tutup semua terminal, buka jendela PowerShell baru, dan jalankan pemeriksaan lagi. Jika sebuah php --ri perintah melaporkan Ekstensi tidak ada, jalankan ulang perintah instalasi PIE dari C:\php-quickstart.
Jika sebuah koneksi melaporkan FA001 dan menyatakan bahwa opsi autentikasi tidak dapat digunakan dengan Integrated Security, pastikan bahwa SQL_AUTHENTICATION bernilai tepat ActiveDirectoryIntegrated. Jalankan php --ri sqlsrv atau php --ri pdo_sqlsrv periksa versi driver PHP, dan perbarui driver jika sudah lebih tua dari 5.10.1.
Pembersihan
Sampel tersebut merilis pernyataan mereka dan menutup koneksi mereka. Mereka tidak membuat objek basis data atau menyimpan data.
Pengaturan koneksi berlaku untuk sesi terminal saat ini. Tutup terminal setelah selesai.
Untuk pengaturan percobaan ulang produksi, timeout, logging, dan failover, gunakan baseline produksi daripada memperpanjang sampel run pertama ini.