Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu hızlı başlangıç'ı kullanarak PHP sürücülerini yükleyin, Microsoft Entra kimliğinizle Azure SQL'ye bağlanın ve örnek veriye göre parametreli Transact-SQL (T-SQL) sorgusu AdventureWorksLT çalıştırın. Ya SQLSRV prosedürel API'sini ya da PDO_SQLSRV API'sini seçin. Her iki örnek de ortam değişkenlerinden bağlantı ayarlarını okur ve aynı sonucu verir.
Sorgu ürün verilerini okur ve veritabanı nesneleri oluşturmaz.
Başlamadan önce
- Örnek verileri içeren
AdventureWorksLTbir veritabanı oluşturun veya bağlanın. Azure SQL Veritabanı, Microsoft Fabric'te SQL veritabanı, SQL Server ve SQL Server konteynerleri için kurulum talimatları için AdventureWorks örnek veritabanlarına bakınız. - Veritabanı yöneticisinden Microsoft Entra kimliğiniz için bir veritabanı kullanıcısı oluşturmasını iste.
- Windows'ta, veritabanı erişimi olan Windows hesabıyla giriş yapın.
- macOS veya Linux'ta, federe bir Microsoft Entra hesabı için Kerberos bileti alın. Gereksinimler için bkz. Microsoft Entra ID'nin ODBC Sürücüsü ile Kullanılması.
1. PHP ve sürücüleri kur
İşletim sisteminizi seçin. Tüm komut bloğunu kopyalayın, belirtilen terminale yapıştırın ve çalıştırın.
PowerShell'i yönetici olarak açın. Bu bloğu kopyalayın ve çalıştırın:
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
Son üç komut ise kurulu PHP ve uzantı sürümlerini gösterir. Başarılı olduktan sonra yönetici penceresini kapatın.
Herhangi bir php --ri komut uzantının olmadığını bildirirse, devam etmeden önce Kurulum sorun giderme bölümüne gidin.
2. Bağlantı bilgilerini ayarlayın
İşletim sisteminize uygun blokta <server> ve <database> öğelerini değiştirin. Tüm bloğu PHP çalıştırmak için kullanacağınız terminalde kopyalayıp çalıştırın.
Set-Location C:\php-quickstart
$env:SQL_SERVER = "tcp:<server>.database.windows.net,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "ActiveDirectoryIntegrated"
Important
Her iki örnek de şifrelemeyi etkinleştirir ve sunucu sertifikasını doğrular. Sunucunuz özel bir sertifika otoritesinden (CA) gelen sertifika kullanıyorsa, veren kök ve ara CA sertifikalarını istemci işletim sistemi güven deposuna yükleyin. Sertifikanın Konu Alternatif İsim veya Ortak İsim içinde bir isim olarak ayarlanır SQL_SERVER . Aksi takdirde, bağlantı sorgu çalışmadan önce başarısız olur. Daha fazla bilgi için Sertifika zinciri güvenilmiyor ve SQL Server şifrelemesini Yapılandır bölümlerine bakabilirsiniz.
TrustServerCertificate=true sunucu kimliği doğrulamasını atlar. Sadece izole bir yerel test ortamını teşhis etmek için kullanın, üretim veya paylaşılan ortamlar için bir güven yapılandırması olarak değil.
3. Bir örnek oluşturun ve çalıştırın
Bir PHP API seçin. Seçilmiş sekmedeki kodu kullanarak adlandırılmış dosyayı oluşturun ve ardından koddan sonra komutu çalıştırın.
Aşağıdaki kodla oluşturun quickstart-sqlsrv.php :
<?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']);
}
Örneği çalıştırın:
php quickstart-sqlsrv.php
4. Sonucu doğrulayın
Ürün sıraları AdventureWorksLT sürümüne göre değişebilir. Her iki örnek de bu örneğe benzer bir çıktı vermektedir:
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
Her örnek, satırları yazdırmadan önce sorgunun adları boş olmayan ve ürün kimlikleri artan sırada olan beş ürün döndürdüğünü kontrol eder. Sonra ifadeyi serbest bırakır ve bağlantıyı kapatır. Sorgu, kaldırılacak herhangi bir veritabanı nesnesi veya veri bırakmıyor.
Başka bir kimlik doğrulama yöntemi kullanın
Örnekler ayrıca PHP dosyalarını değiştirmeden yönetilen kimlik ve SQL Server doğrulamasını da kabul eder.
İdare edilen kimlik
Azure'da barındırılan bir uygulama için, yönetilen bir kimlik etkinleştirin ve veritabanı kullanıcısını oluşturun. Uygulamanın yapılandırmasında sunucu, veritabanı ve kimlik doğrulama modunu ayarlayın:
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
SQL_USER veya SQL_PASSWORD ayarlamayın.
Microsoft Fabric'teki SQL veritabanı için, kimliğe Okuma öğe iznini Fabric erişim denetimleri aracılığıyla verin. SQL bağlantı noktasını veritabanı öğesinden kullanın, SQL analitik uç noktasından değil. Fabric'teki SQL veritabanı SQL kimlik doğrulamasını desteklemiyor.
SQL Server kimlik doğrulaması
SQL Server doğrulamasını yalnızca kontrol ettiğiniz SQL Server örnekleri için, örneğin izole yerel geliştirme konteyneri için kullanın. Kimlik bilgilerini uygulama yapılandırmasında veya gizli bir depoda tutun. Onları kaynak kontrolüne taahhüt etme.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Diğer Microsoft Entra kimlik doğrulama yöntemleri için bkz. Connect using Microsoft Entra authentication.
Kurulum sorun giderme
Kurulum bloğu durursa veya doğrulama komutu başarısız olursa bu kontrolleri kullanın.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Bulamıyorsanız Get-Commandphp.exe, tüm terminalleri kapatın, yeni bir PowerShell penceresi açın ve kontrolleri tekrar çalıştırın.
php --ri komutu Uzantı mevcut değil bildirirse, PIE kurulum komutlarını C:\php-quickstart konumundan yeniden çalıştırın.
Eğer bir bağlantı FA001 bildiriyorsa ve Authentication seçeneğinin Entegre Güvenlik ile kullanılamayacağını söylüyorsa, SQL_AUTHENTICATION değerinin tam olarak ActiveDirectoryIntegrated olduğunu doğrulayın. PHP sürücü sürümünü çalıştırın php --ri sqlsrv veya php --ri pdo_sqlsrv kontrol edin, sürücü ise 5.10.1'den eskiyse güncelleyin .
Temizleme
Örnekler açıklamalarını yapar ve bağlantılarını kapatır. Veritabanı nesneleri oluşturmazlar veya verileri kalıcı tutmazlar.
Bağlantı ayarları mevcut terminal oturumuna uygulanır. İşin bittiğinde terminali kapat.
Üretim yeniden denemesi, zaman aşımı, loglama ve failover ayarları için, bu ilk deneme örneğini uzatmak yerine üretim temelini kullanın.