Eroare fatală: Apel la o funcție nedefinită sqlsrv_connect() (Programare, Php, Server Sql, Wamp)

Sarah a intrebat.
a intrebat.

Am întâlnit destul de multe postări cu privire la aceeași întrebare cu privire la același subiect, însă tot nu reușesc să o rezolv și de aceea întreb. Încerc să mă conectez la sql în scriptul meu php. Șirul meu de conexiune este:

/* Specify the server and connection string attributes. */
$serverName = "xxx-PCSQLExpress";
$connectionOptions = array("Database"=>"Salesforce");
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn === false)
{
      die(print_r(sqlsrv_errors(), true));
}

Am instalat și am inclus următoarele în php.ini fișier situat în folderul wamp: C:wampbinphpphp5.4.16:

extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll

My wampserver funcționează bine și la fel și wampapache și wampsqld servicii. Sunt capabil să execut cu succes php.exe. Cu toate acestea, nu reușesc să realizez conexiunea cu SQL Server 2008 R2 unde se află baza mea de date. Vă rog să mă ajutați!

EDIT 1: Serverul wamp rulează serviciul wampmysql în timp ce eu încerc să mă conectez la SQL Server 2008 R2. Ar putea fi acesta motivul? Ar trebui să folosesc MySQL în loc de SQL? Vreun indiciu?

EDIT 2: Nu văd sqlsrv secțiune deloc atunci când execut phpinfo() deși am adăugat extension=php_sqlsrv_54_ts.dll în secțiunea php.ini fișierul aflat în folderul bin al serverului wamp.

Comentarii

  • Pentru a evita erorile roșii: MySQL și SQL Server sunt motoare de baze de date complet diferite – codul pe care l-ați postat nu folosește nici PDO, nici MySQL. –  > Por Álvaro González.
  • @ÁlvaroG.Vicario Am eliminat PDO dll și am actualizat calea extensiilor adăugate astfel încât să mă asigur că se referă la dll-ul din folderul php/ext. Cu toate acestea, phpinfo() al meu nu returnează nicio secțiune sqlsrv. Vreo indicație? –  > Por Sarah.
5 răspunsuri
Álvaro González

Când instalați extensii terțe, trebuie să vă asigurați că toți parametrii de compilare se potrivesc:

  • Versiunea PHP
  • Arhitectura (32/64 biți)
  • Compilator (VC9, VC10, VC11…)
  • Siguranța firelor de execuție

Printre defecțiunile comune se numără:

  • Editarea unui fișier greșit php.ini greșit (lucru tipic pentru pachete); calea corectă este afișată în phpinfo().
  • Uitarea de a reporni Apache.
  • Neputând vedea erorile de pornire; acestea ar trebui să apară în jurnalele Apache, dar puteți utiliza și linia de comandă pentru a diagnostica, de ex:

    php -d display_startup_errors=1 -d error_reporting=-1 -d display_errors -c "C:PathTophp.ini" -m
    

Dacă totul este în regulă, ar trebui să vedeți sqlsrv în ieșirea comenzii și/sau phpinfo() (în funcție de ce SAPI configurați):

[PHP Modules]
bcmath
calendar
Core
[…]
SPL
sqlsrv
standard
[…]

Comentarii

  • Am modificat din nou php-ul și am văzut că sqlsrv în ieșirea comenzii. Cu toate acestea, nu o văd când execut phpinfo(). Acesta nu conține niciun antet pentru sqlsrv. Având în vedere că îl văd la ieșirea comenzii, asta indică faptul că setările mele sunt corecte? –  > Por Sarah.
  • php -i este același cu phpinfo(), , cu excepția formatului (text simplu vs HTML). –  > Por Álvaro González.
  • Am adăugat o captură de ecran mai sus. Dacă este același lucru, de ce nu se reflectă sqlsrv în pagina html? Încă primesc aceeași eroare când încerc să mă conectez la SQL Server folosind sqlsrv_connect. –  > Por Sarah.
  • rezolvat! Problema a fost că mă refeream la un fișier greșit php.ini fișier – stânjenit. –  > Por Sarah.
Sarah

Acest lucru m-a ajutat să ajung la răspunsul meu. Există două php.ini fișiere localizate, în cazul meu, pentru wamp. Unul este sub folderul php și celălalt este în folderul C:wampbinapacheApachex.x.xbin folder. Atunci când se conectează la SQL prin sqlsrv_connect ne referim la fișierul php.ini din folderul apache folder. Adăugați următoarele (conform versiunii dvs.) la acest fișier:

extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll

Comentarii

  • Adăugați acest lucru la extensia Windows în fișierul php.ini? –  > Por kya.
  • @user2995165 da, acest lucru este sub extensia Windows –  > Por Sarah.
  • Am făcut asta, dar eroarea este persistentă. Are vreo diferență dacă baza de date se află pe un alt server ? Pentru că am două servere, un server de aplicații cu wamp și un server de baze de date cu SQL server 2005. –  > Por kya.
  • Nu, asta nu ar trebui să fie o problemă. Care este mesajul de eroare pe care îl primiți? –  > Por Sarah.
  • poți să te uiți la postarea mea: stackoverflow.com/questions/24776078/…. . Nu am putut obține niciun ajutor. Va fi super minunat dacă mă poți ajuta să rezolv problema. Primesc o eroare fatală: Apel la o funcție nedefinită sqlsrv_connect() –  > Por kya.
Elshan

Dacă utilizați Driverele Microsoft 3.1, 3.0 și 2.0.vă rugăm să verificați versiunea PHP deja instalată cu IIS.

Utilizați acest script pentru a verifica versiunea php:

<?php echo phpinfo(); ?>

SAU

Dacă ați instalat PHP Manager în IIS utilizând programul de instalare a platformei web, puteți verifica versiunea din acesta.

Apoi:
Dacă utilizați noua versiune PHP (5.6), descărcați driverele de aici

Pentru versiuni PHP mai mici de 5.6 – descărcați Driverele de aici

  • PHP Driver versiunea 3.1 necesită PHP 5.4.32 sau PHP 5.5.16 sau o versiune ulterioară.
  • Driverul PHP versiunea 3.0 necesită PHP 5.3.0 sau o versiune ulterioară. Dacă este posibil, utilizați PHP 5.3.6 sau o versiune ulterioară.
  • Driverul PHP Driver versiunea 2.0 funcționează cu PHP 5.2.4 sau o versiune ulterioară, dar nu și cu PHP 5.4. Dacă este posibil, utilizați PHP 5.2.13 sau o versiune ulterioară.

Apoi, utilizați PHP Manager pentru a adăuga acel driver descărcat în php config fișier.Puteți face acest lucru așa cum se arată mai jos (răsfoiți fișierele și apăsați OK).Apoi reporniți serverul IIS

Dacă această metodă nu funcționează, vă rugăm să modificați versiunea php și încercați să rulați scriptul php.

Sfat: Schimbați versiunea php version la mai mică și încercați să înțelegeți ce s-a întâmplat.apoi puteți descărca driverele relevante.

Dave Child

Mai întâi verificați dacă extensia este încărcată corect în phpinfo(); (ceva de genul sqlsrv ar trebui să apară). În caz contrar, extensia nu este încărcată corespunzător. De asemenea, trebuie să reporniți apache după instalarea unei extensii.

Comentarii

  • @DaveChild Am rulat phpinfo() și nu văd sqlsrv. Oare îmi lipsește? Unde ar trebui să apară? Și cum să încarc extensia în mod corespunzător dacă aceasta este într-adevăr problema? –  > Por Sarah.
  • Dacă vă lipsește (ceea ce este cel mai probabil), atunci problema este încărcarea extensiei. Există o mulțime de motive posibile pentru care nu este încărcată. Începeți prin a verifica dacă ați modificat fișierul php.ini corect (locația fișierului php.ini va fi afișată în phpinfo). Verificați și jurnalele de erori pentru mai multe informații. –  > Por Dave Child.
  • @DaveChild Îmi pare rău, dar este prima dată când lucrez cu sql în php. Sub ce antet pot verifica calea de acces a php.ini? Sunt complet pierdut cu acest lucru. –  > Por Sarah.
  • @DaveChild vă rugăm să consultați edit în întrebarea de mai sus. –  > Por Sarah.
ashkufaraz

am același lucru, deoarece în httpd.conf în apache PHPIniDir D:/wamp/bin/php/php5.5.12 care a fost incorect