Încerc să mă conectez la serverul meu local MSSQL dintr-un fișier PHP simplu folosind funcția sqlsrv_connect(), dar de fiecare dată când apelez fișierul în browser prin localhost, emite un 500 (Eroare internă a serverului) care spune: „Eroare fatală PHP: eroare neprinsă: apel la funcția nedefinită sqlsrv_connect() în C:\inetpub\wwwroot\AJAX_Tutorial\get_db_data.php:4”. get_db_data.php este fișierul de la care încerc să conectez serverul. Se pare că PHP sau localhost nu pot identifica funcția sqlsrv_connect(). Dar în ceea ce mă privește, am făcut tot ce era necesar pentru a mă asigura că PHP conectează serverul SQL.
Mediul meu:
Windows 10 Pro, versiunea 21H2, pe 64 de biți.
Ce am facut:
- IIS activat, asigurând funcționarea CGI/Fast CGI.
- S-a instalat versiunea PHP 8.1.1 non-thread safe x64 la C:\Program Files\PHP-8.1.1
- În C:\Program Files\PHP-8.1.1, a fost redenumit fișierul php.ini-development în php.ini
- În fișierul php.ini, a decomentat directiva extension_dir = „ext”.
- S-a descărcat php_wincache.dll și l-a adăugat la directorul ext implicit al PHP.
- S-a adăugat extensia de linie=php_wincache.dll la secțiunea Extensii dinamice a fișierului php.ini.
- S-a instalat PHPManagerForIIS_V1.5.0 și am configurat IIS în consecință, astfel încât PHP să poată fi găzduit prin IIS. De asemenea, ați activat aici extensia php_wincache.dll.
- S-a instalat MSSQL Server 2019 Developer Edition împreună cu Studioul de management respectiv.
- Am creat baza de date și tabelele respective în SQL Server la care vreau să mă conectez din PHP.
- M-am asigurat că Microsoft ODBC Driver 17 pentru SQL Server este instalat pe computerul meu, ceea ce este cerut de PHP.
- M-am asigurat că Microsoft SQL Server 2012 Native Client este instalat pe computerul meu, ceea ce este cerut de PHP.
- Am descărcat driverele Microsoft pentru PHP pentru SQL Server 5.9 și am extras conținutul acestuia. Am copiat fișierul numit php_sqlsrv_80_nts_x64.dll în pachet și l-am lipit în directorul ext implicit al PHP.
- S-a adăugat extensia de linie=php_sqlsrv_80_nts_x64.dll la secțiunea Extensii dinamice a fișierului php.ini.
- În Manager IIS, prin managerul PHP, a fost activată extensia php_sqlsrv_80_nts_x64.dll.
- Am creat un fișier phpinfo.php în rădăcina IIS, care a rulat cu succes, dar nu a găsit nicio mențiune despre wincache și sqlsrvin.
După pașii de mai sus, am rulat fișierul PHP real încercând să conectez serverul SQL, dar trimite o eroare care spune că nu poate identifica funcția sqlsrv_connect(). Presupunând că php_sqlsrv_80_nts_x64.dll nu este încărcat în timp ce PHP pornește, am rulat php --ini în promptul de comandă. Atunci sunt trimise următoarele mesaje:
Avertisment PHP: Pornirea PHP: Nu se poate încărca biblioteca dinamică „php_wincache.dll” (încercat: ext\php_wincache.dll (Modulul specificat nu a putut fi găsit), ext\php_php_wincache.dll.dll (Modulul specificat nu a putut fi găsit) ) în Necunoscut pe linia 0
Avertisment: Pornire PHP: sqlsrv: Imposibil de inițializat modulul
Modul compilat cu modulul API=20200930
PHP compilat cu modulul API=20210902
Aceste opțiuni trebuie să se potrivească
în Necunoscut pe linia 0
Calea fișierului de configurare (php.ini):
Fișier de configurare încărcat: C:\Program Files\PHP-8.1.1\php.ini
Scanați pentru fișiere .ini suplimentare în: (niciunul)
Fișiere .ini suplimentare analizate: (niciunul)
Cu toate acestea, PHP pare să funcționeze bine, deoarece când am folosit metoda jQuerey AJAX get() și post() dintr-un fișier HTML pentru a prelua date dintr-un alt fișier PHP, am reușit să fac acest lucru. Nu s-a făcut nicio excepție atunci.
Deci, ce îmi lipsește acum că nici php_wincache.dll și sqlsrv nu par să se încarce în timpul pornirii PHP și nici nu pot conecta serverul SQL din fișierul PHP? Deoarece sunt nou în jQuery AJAX și PHP, nu sunt prea conștient de complexitatea lor și, prin urmare, am rămas blocat cu problema în ultimele patru zile. Am folosit toate resursele din mână, dar nimic nu funcționează. Te rog ajuta-ma. Nu pot să-mi fac sarcinile din cauza asta.
Multumesc si Salutari!
cod get_db_data.php:
<?php
$serverName = "(local)"; // Optionally use port number (1433 by default).
$connectionString = array("Database"=>"TestDB"); // Connection string.
$conn = sqlsrv_connect($serverName, $connectionString); // Connect using Windows Authentication.
if($conn === false) {
echo "Connection could not be established.<br/>";
die(print_r(sqlsrv_errors(), true));
} else {
echo "Connection established successfuly.<br/>";
}
sqlsrv_close($conn); // Close connection resources.
?>