Oharra
Baimena behar duzu orria atzitzeko. Direktorioetan saioa has dezakezu edo haiek alda ditzakezu.
Baimena behar duzu orria atzitzeko. Direktorioak alda ditzakezu.
Usa este inicio rápido para instalar los controladores PHP, conectarte a Azure SQL con tu identidad de Microsoft Entra y ejecutar una consulta de Transact-SQL parametrizada (T-SQL) sobre los AdventureWorksLT datos de muestra. Elige la API SQLSRV de procedimientos o la API PDO_SQLSRV. Ambas muestras leen la configuración de conexión de variables de entorno y devolven el mismo resultado.
La consulta lee datos de producto y no crea objetos de base de datos.
Antes de comenzar
- Crea o conéctate a una base de datos que contenga los datos
AdventureWorksLTde ejemplo. Para obtener instrucciones de configuración de Azure SQL Database, la base de datos SQL en Microsoft Fabric, SQL Server y contenedores de SQL Server, consulta las bases de datos de ejemplo de AdventureWorks. - Pide al administrador de la base de datos que cree un usuario de base de datos para tu identidad Microsoft Entra.
- En Windows, inicia sesión con la cuenta de Windows que tiene acceso a la base de datos.
- En macOS o Linux, consigue un ticket de Kerberos para una cuenta federada de Microsoft Entra. Para los requisitos, consulte Uso de Microsoft Entra ID con el controlador ODBC.
1. Instalar PHP y los controladores
Seleccione su sistema operativo. Copia todo el bloque de comandos, pégalo en el terminal especificado y ejecutalo.
Abra PowerShell como administrador. Copia y ejecuta este bloque:
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
Los tres últimos comandos muestran las versiones instaladas de PHP y extension. Cierra la ventana de administrador después de que tengan éxito.
Si alguno de los php --ri comandos indica que la extensión no está presente, ve a Solución de problemas de instalación antes de continuar.
2. Establecer la información de conexión
Reemplaza <server> y <database> en el bloque correspondiente a tu sistema operativo. Copia y ejecuta todo el bloque en el mismo terminal que usarás para ejecutar 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 muestras permiten el cifrado y validan el certificado del servidor. Si tu servidor utiliza un certificado de una autoridad certificadora privada (CA), instala los certificados raíz e intermedios de la CA que emiten en la memoria de confianza del sistema operativo cliente. Configura SQL_SERVER con un nombre del nombre alternativo del sujeto o del nombre común del certificado. De lo contrario, la conexión falla antes de que se ejecute la consulta. Para más información, consulte Cadena de certificados no confiable y Configurar cifrado de SQL Server.
TrustServerCertificate=true Evita la validación de identidad del servidor. Úsalo solo para diagnosticar un entorno de prueba local aislado, no como configuración de confianza para entornos de producción o compartidos.
3. Crear y ejecutar una muestra
Selecciona una API de PHP. Crea el archivo con nombre usando el código en la pestaña seleccionada y luego ejecuta el comando después del código.
Cree el archivo quickstart-sqlsrv.php con el siguiente 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']);
}
Ejecución del ejemplo:
php quickstart-sqlsrv.php
4. Verificar el resultado
Las filas de productos pueden variar según la versión de AdventureWorksLT. Ambas muestras devolven una salida que se asemeja a este ejemplo:
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 muestra comprueba que la consulta haya devuelto cinco productos con nombres no vacíos y identificadores de producto ascendentes antes de imprimir las filas. Luego libera la declaración y cierra la conexión. La consulta no deja ningún objeto de base de datos ni datos para eliminar.
Utilizar otro método de autenticación
Las muestras también aceptan identidad gestionada y autenticación de SQL Server sin cambiar los archivos PHP.
Identidad administrada
Para una aplicación alojada en Azure, habilita una identidad gestionada y crea su usuario de base de datos. Configura el servidor, la base de datos y el modo de autenticación en la configuración de la aplicación:
SQL_SERVER=tcp:<server>.database.windows.net,1433
SQL_DATABASE=<database>
SQL_AUTHENTICATION=ActiveDirectoryMsi
No establezca SQL_USER ni SQL_PASSWORD.
Para la base de datos SQL en Microsoft Fabric, concede permiso de lectura de elemento de identidad mediante controles de acceso Fabric. Usa el endpoint de conexión SQL desde el elemento de la base de datos, no el endpoint de analítica SQL. La base de datos SQL en Fabric no soporta autenticación SQL.
Autenticación de SQL Server
Usa la autenticación de SQL Server solo para una instancia de SQL Server que controles, como un contenedor de desarrollo local aislado. Guarda las credenciales en configuración de aplicación o en un almacén secreto. No los pongas bajo control de versiones.
$env:SQL_SERVER = "tcp:<server>,1433"
$env:SQL_DATABASE = "<database>"
$env:SQL_AUTHENTICATION = "SqlPassword"
$env:SQL_USER = "<user_id>"
$env:SQL_PASSWORD = "<password>"
Para otros métodos de autenticación de Microsoft Entra, véase Conectar usando autenticación Microsoft Entra.
Resolución de problemas en la instalación
Utiliza estas comprobaciones si el bloque de instalación se detiene o falla un comando de verificación.
Get-Command php.exe
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv
Get-OdbcDriver -Name "ODBC Driver 18 for SQL Server"
Si Get-Command no encuentras php.exe, cierra todos los terminales, abre una nueva ventana de PowerShell y haz las comprobaciones de nuevo. Si un comando php --ri muestra La extensión no está presente, vuelva a ejecutar los comandos de instalación de PIE desde C:\php-quickstart.
Si una conexión muestra FA001 y dice que la opción Authentication no se puede usar con Integrated Security, confirma que SQL_AUTHENTICATION es exactamente ActiveDirectoryIntegrated. Ejecuta php --ri sqlsrv o php --ri pdo_sqlsrv revisa la versión del controlador PHP y actualiza el controlador si es anterior a la 5.10.1.
Limpieza
Las muestras publican sus declaraciones y cierran sus conexiones. No crean objetos de base de datos ni persisten datos.
La configuración de conexión se aplica a la sesión terminal actual. Cierra el terminal cuando termines.
Para la configuración de reintentos de producción, tiempo de espera, registro de eventos y conmutación por error, utiliza la configuración base de producción en lugar de ampliar este ejemplo de ejecución inicial.