Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Utilize este guia de início rápido para instalar os controladores do PHP, ligar-se ao SQL do Azure com a sua identidade do Microsoft Entra e executar uma consulta Transact-SQL parametrizada (T-SQL) sobre os dados de exemplo AdventureWorksLT. Escolha a API processual SQLSRV ou a API PDO_SQLSRV. Ambas as amostras leem as definições de ligação das variáveis de ambiente e devolvem o mesmo resultado.
A consulta lê dados de produto e não cria objetos de base de dados.
Antes de começar
- Crie ou ligue-se a uma base de dados que contenha os
AdventureWorksLTdados de exemplo. Para obter instruções de configuração do Base de Dados SQL do Azure, da base de dados SQL no Microsoft Fabric, do SQL Server e de contentores do SQL Server, consulte bases de dados de exemplo AdventureWorks. - Peça ao administrador da base de dados para criar um utilizador de base de dados para a sua identidade Microsoft Entra.
- No Windows, inicia sessão com a conta Windows que tem acesso à base de dados.
- No macOS ou Linux, obtenha um ticket Kerberos para uma conta federada Microsoft Entra. Para requisitos, consulte Utilização do Microsoft Entra ID com o Driver ODBC.
1. Instalar o PHP e os drivers
Selecione o seu sistema operativo. Copia o bloco de comandos inteiro, cola-o no terminal especificado e executa-o.
Abrir o PowerShell como administrador. Copie e execute este bloco:
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
Os três últimos comandos mostram as versões instaladas do PHP e da extensão. Fecha a janela do administrador depois de terem êxito.
Se algum dos php --ri comandos indicar que a extensão não está presente, vá para Resolução de Problemas da Instalação antes de continuar.
2. Definir a informação de ligação
Substitua <server> e <database> no bloco correspondente ao seu sistema operativo. Copia e executa o bloco inteiro no mesmo terminal que vais usar para correr PHP.
Set-Location C:\php-quickstart
$env:SQL_SERVER = "tcp:<server>.database.windows.net,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "ActiveDirectoryIntegrated"
Importante
Ambas as amostras permitem a encriptação e validam o certificado do servidor. Se o seu servidor usar um certificado de uma autoridade certificadora privada (CA), instale os certificados raiz e intermédios da CA emitentes na loja de confiança do sistema operativo do cliente. Definir SQL_SERVER como um nome que conste do Nome Alternativo do Requerente ou do Nome Comum do certificado. Caso contrário, a ligação falha antes da consulta ser executada. Para mais informações, consulte Cadeia de certificados não confiável e Configurar encriptação do SQL Server.
TrustServerCertificate=true ignora a validação da identidade do servidor. Use-o apenas para diagnosticar um ambiente de teste local isolado, não como configuração de confiança para ambientes de produção ou partilhados.
3. Criar e executar uma amostra
Selecione uma API PHP. Crie o ficheiro nomeado usando o código no separador selecionado e depois execute o comando após o código.
Crie quickstart-sqlsrv.php com o seguinte código:
<?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']);
}
Analisa a amostra:
php quickstart-sqlsrv.php
4. Verificar o resultado
As linhas de produtos podem variar consoante a versão do AdventureWorksLT. Ambas as amostras retornam uma saída que se assemelha a este exemplo:
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
Cada amostra verifica se a consulta devolveu cinco produtos com nomes não vazios e IDs de produto crescentes antes de imprimir as linhas. Depois liberta a declaração e fecha a ligação. A consulta não deixa quaisquer objetos ou dados da base de dados para remover.
Usar outro método de autenticação
Os exemplos também aceitam identidade gerida e autenticação SQL Server sem alterar os ficheiros PHP.
Identidade gerenciada
Para uma aplicação alojada no Azure, ativa uma identidade gerida e cria o utilizador da base de dados. Defina o servidor, base de dados e modo de autenticação na configuração da aplicação:
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
Não definas SQL_USER ou SQL_PASSWORD.
Para base de dados SQL no Microsoft Fabric, conceda à identidade permissão de leitura do item através dos controlos de acesso do Fabric. Usa o endpoint de ligação SQL do item da base de dados, não o endpoint de análise SQL. A base de dados SQL no Fabric não suporta autenticação SQL.
Autenticação do SQL Server
Use a autenticação do SQL Server apenas para uma instância do SQL Server que controle, como um contentor local isolado de desenvolvimento. Mantém as credenciais na configuração da aplicação ou numa loja secreta. Não os coloquem em controlo de versão.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Para outros métodos de autenticação Microsoft Entra, veja Connect using Microsoft Entra authentication.
Resolução de problemas na instalação
Utilize estas verificações se o bloco de instalação parar ou se um comando de verificação falhar.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Se Get-Command não conseguir encontrar php.exe, fecha todos os terminais, abre uma nova janela do PowerShell e executa novamente as verificações. Se um comando php --ri indicar Extensão não presente, execute novamente os comandos de instalação do PIE a partir de C:\php-quickstart.
Se uma ligação indicar FA001 e que a opção Autenticação não pode ser usada com Segurança Integrada, confirme que SQL_AUTHENTICATION é exatamente ActiveDirectoryIntegrated. Execute php --ri sqlsrv ou php --ri pdo_sqlsrv para verificar a versão do controlador PHP e atualize o controlador se for anterior à versão 5.10.1.
Limpeza
Os samples divulgam as suas declarações e fecham as suas ligações. Eles não criam objetos de base de dados nem persistem dados.
As definições de ligação aplicam-se à sessão terminal atual. Fecha o terminal quando terminares.
Para as definições de repetição em produção, tempo limite, registo e ativação pós-falha, use a configuração de base de produção em vez de alargar este exemplo de execução inicial.