PHP + MS SQL kapcsolodási hiba

PHP + MS SQL kapcsolodási hiba
2013-08-02T13:33:37+02:00
2013-08-05T14:58:09+02:00
2022-11-29T13:00:37+01:00
km90
MS SQL szervert szeretném elérni Php-n keresztül, de az alábbi üzenetet kapom:

Call to undefined function mssql_connect()

Ezt a kódot is lefutattam:

if (function_exists('mssql_fetch_row')) {
echo "MSSQL functions are available.<br />\n";
} else {
echo "MSSQL functions are not available.<br />\n";
}

Melyre a válasz: MSSQL functions are not available.

A php.ini-be a extension=php_mssql.dll elöl kitöröltema pontosvesszőt, de semmi változás.

Akinek van ötlete kérem segítsen.
Mutasd a teljes hozzászólást!
A dll-ek verziója sem mindegy ám! Nem minden, a neten található dll kompatibilis épp a nálad lévő php-val. Meg az sem mindegy, hogy thread safe (ts) vagy non-thread safe (nts) verzió.

Amúgy sqlsrv drivereket elviekben egyszerű beállítani:
"csak" le kell tölteni a microsoft oldaláról az 5.5.1-es php-hez valót (te tudod, hogy milyen változatot töltöttél le php-ból, vc6 vagy vc9-cel fordítottat), azokat bemásolnod a php/ext könyvtárba, php.ini-be beírod a két filet az extension-ök közé és újraindítod a webszervert. Utána még előfordulhat, hogy hiányolni fogja a gépedről az mssql native client nevű okosságot, azt is be kell szerezni az MS oldaláról (msi telepítőt tudsz letölteni), installálod és onnantól működik.

(A 80as portot nem a skype fogja véletlen?)



PHP Version 5.5.1 használok.

vs
Amit használok: PHP Version 5.4.16


Most akkor melyiket is?
Mutasd a teljes hozzászólást!

  • És a dll file ott van a megfelelő könyvtárban (php/ext)? Illetve a php.ini módosítása után újraindítottad a webszervert?
    Mutasd a teljes hozzászólást!
  • Az mssql már elavult. Elvileg php 5+ felett már sqlsrv van.

    PHP: sqlsrv_connect - Manual

    Nemrégiben én is ebbe a hibába estem.
    Mutasd a teljes hozzászólást!
  • Esetleg PDO.
    Mutasd a teljes hozzászólást!
  • Persze, ajánlott az sqlsrv, de ugye azt először még le is kell tölteni az MS oldaláról. Csekkoltam 5.5.1-es változatban defaultból nincs benne a dll. Azt meg nem írta km90, hogy melyik php verzióval próbálkozik.

    @Rendi:
    persze az MS-hez való pdo dll-t is engedélyezni kell php.ini-ből, mielőtt használni tudná.
    Mutasd a teljes hozzászólást!
  • Senki nem állította, hogy nem kell engedélyezni :]
    Csak NeVelDe írta, hogy a kérdező elavult csomagot akar használni, én meg írtam egy másik lehetőséget.

    Amúgy phpinfo(), és minden kiderül.
    Mutasd a teljes hozzászólást!
  • Vagy command lineból indítja el a php-t, ott kiírja, ha valami gubanc volt az extensionök betöltésével induláskor (azt hiszem, ez phpinfoból nem derül ki).
    De jobban belegondolva azt is el tudom képzelni, hogy a dll ugyan ott van, de rossz a verziója vagy nem a php-val azonos fordítóval lett fordítva.
    Mutasd a teljes hozzászólást!
  • Sajnálom, hogy csak most tudok írni, de volt egy kis gubanc a SQL és a apach server 80-as portjával, de sikerült működésre bírni.

    PHP Version 5.5.1 használok.

    Milyen dll-t kell letöltenem, amit a php/ext-be kell majd rakni ?
    Mutasd a teljes hozzászólást!
  • Köszönöm a linket, miután letöltöttem a dll-ket, még mindig ugyanaz a hiba.

    A php.ini mit kellene engedélyeznem ?
    Mutasd a teljes hozzászólást!
  • Sajnos még ezek után sem jó :(
    Mutasd a teljes hozzászólást!
  • ADODB aztán még ezt nézd meg hozzá. Sokkal többre mész vele, mint molyolni a kapcsolódással, hibakezeléssel.
    Tisztább, szárazabb érzés.
    Mutasd a teljes hozzászólást!
  • Most úgy néz ki a helyzet, hogy letöltöttem és bemásoltam a php fáj mellé az "adodb5" mappát.

    Az MS SQL 2012 saját gépre van telepítve.

    index.php:

    include("adodb5/adodb.inc.php");
    //create an instance of the ADO connection object
    $conn =&ADONewConnection ('mssql');
    //define connection string, specify database driver
    $conn->Connect('MATEO-PC\SQLEXPRESS', 'sa', 'sa', 'proba');
    //declare the SQL statement that will query the database

    $query = "select * from felhasznalok";



    $rs = $conn->execute($query);
    //execute the SQL statement and return records
    $arr = $rs->GetArray();
    print_r($arr);


    Miután lefuttatom a kódot, nem kapok semmi hibaüzenetet, üres a képernyő
    Én arra gondolok, hogy nem tud csatlakozni a szerverhez.

    Valakinek valami ötlet ?
    Mutasd a teljes hozzászólást!
  • include elé rakj be ilyet:

    error_reporting(E_ALL); ini_set('display_errors', 1);

    talán kiderül, hogy mi a gondja.
    Mutasd a teljes hozzászólást!
  • Ezt a hibaüzenetet kaptam:


    Strict Standards: Only variables should be assigned by reference in C:\xampp\htdocs\munka\index.php on line 65

    a 65. sorba ez van:

    $conn =&ADONewConnection ('mssql');
    Mutasd a teljes hozzászólást!
  • Ettől függetlenül még működnie kellene - próbáld meg kidebuggolni. Pl. egy var_dump($conn); mit ad vissza, majd a $conn->Connect() true vagy false-t ad-e (var_dump($conn->Connect(...))) + egy
    $conn->debug = true;
    a ADONewConnection után hátha tud valami okosat mondani.
    Mutasd a teljes hozzászólást!

  • echo $conn->Connect();

    0-át adott vissza

    Viszont a

    $conn->debug = true;

    után ezt kaptam:

    Strict Standards: Only variables should be assigned by reference in C:\xampp\htdocs\munka\index.php on line 68

    MATEO-PC\SQLEXPRESS: Missing extension for mssql
    (mssql): select * from felhasznalok

    Fatal error: Call to undefined function mssql_query() in C:\xampp\htdocs\munka\adodb5\drivers\adodb-mssql.inc.php on line 830


    Amit szintén nem értem, hogy most mi a gáz...

    Amúgy hálás vagyok a segítségetekért!
    Mutasd a teljes hozzászólást!
  • Ezt próbáltad-e már:

    phpinfo.php

    <? phpinfo(); ?>

    futtatsd le a localhost-ól és meg tudud nézni, hogy az mssql kiterjesztés betöltődik-e (http://localhost/phpinfo.php)
    Mutasd a teljes hozzászólást!
  • mssql_* függvényeket akarja alapból használni - ami nincs ezek szerint (attól függetlenül, hogy a ; -t kivetted még nem biztos, hogy működik - lehet hiányzik a .dll fájl vagy nem kompatibilis a dll - error logból kiderülne).

    Ezeket még megpróbálhatod (ne egyszerre, cserélgesd a függvény paraméterét):

    $conn =&ADONewConnection ('mssqlnative'); // sqlsrv_* függvényeket használja // vagy $conn =&ADONewConnection ('pdo_mssql'); // PDO-t használja - nézd meg engedélyezve van-e a mssql extension (php_pdo_mssql). // esetleg $conn =&ADONewConnection ('odbc_mssql');

    debug maradjon bekapcsolva.
    Mutasd a teljes hozzászólást!

  • $conn =&ADONewConnection ('mssqlnative');

    Válasz: mssqlnative extension not installed


    $conn =&ADONewConnection ('pdo_mssql');

    Válasz: semmi


    $conn =&ADONewConnection ('odbc_mssql');

    Válasz:

    Strict Standards: Only variables should be assigned by reference in C:\xampp\htdocs\munka\index.php on line 71

    Warning: odbc_connect(): in C:\xampp\htdocs\munka\adodb5\drivers\adodb-odbc.inc.php on line 64

    (odbc_mssql): SET CONCAT_NULL_YIELDS_NULL OFF

    Warning: odbc_exec() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\munka\adodb5\drivers\adodb-odbc.inc.php on line 540
    IM002: [Microsoft][ODBC illesztőprogram-kezelő] Az adatforrásnév nem található, és egyetlen alapértelmezett illesztőprogram sincs megadva.
    MATEO-PC\SQLEXPRESS: [Microsoft][ODBC illesztőprogram-kezelő] Az adatforrásnév nem található, és egyetlen alapértelmezett illesztőprogram sincs megadva.

    (odbc_mssql): select * from felhasznalok

    Warning: odbc_exec() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\munka\adodb5\drivers\adodb-odbc.inc.php on line 540
    IM002: [Microsoft][ODBC illesztőprogram-kezelő] Az adatforrásnév nem található, és egyetlen alapértelmezett illesztőprogram sincs megadva.

    Array ( )

    Mutasd a teljes hozzászólást!
  • A phpinfo tartalma: --without-mssql" "--without-pdo-mssql" "

    Bemásoltam már a "sqlsrv dll"-eket, de semmi változás.

    Amit használok: PHP Version 5.4.16
    Mutasd a teljes hozzászólást!
  • A lenti képhez hasonló valamit kellene látnod a phpinfo() függvényre, ha nem ezt látod akkor nem tudnak betöltődni a szükséges drivere. Én php 5.2.14-et használok és semmi extra nem kell, hogy egy mssql szerverhez csatlakozzak.

    Az adodb5-re szerintem semmi szükséged, akkor inkább használj PDO-t.

    Én a helyedben csak egy síma mssql connectet hoznék létre teszthez, nem varálnék a adodb-vel.


    Ha még esetleg nem nézted volna.
    Mutasd a teljes hozzászólást!
    Csatolt állomány
  • Itt egy példa PDO-val való kapcsolatra:
    (persze a pdo-t engedélyezni kell a php.ini-ben)


    <?php /*** ez a fájl hozza létre a kapcsolatot az adatbázissal ***/ /*** PDO - MS SQL kapcsolat létrehozása MSSQL SZERVERRE CSATLAKOZÁSSAL ***/ try{ $hostdb = 'OTTHON-D4FA219B\SQLEXPRESS'; $dbname = 'db_name'; $mssql_login ="user"; $mssql_pwd ="********"; $dbh = new PDO ('mssql:host='.$hostdb .';dbname='.$dbname, $mssql_login , $mssql_pwd); $dbh -> exec("set names latin2"); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch(PDOException $e) { print "hiba: ".$e->getMessage().'<br>'; } if (!$dbh){ print 'Nincs adatbázis kapcsolat'; }; ?>
    Mutasd a teljes hozzászólást!
  • Köszönöm szépen a segítséget!

    Nem találtam a dll-t ezért letöltöttem "php_pdo.dll"-t, és a php.inibe beilesztettem ezt: extension=php_pdo.dll



    Ennek ellenére ezt a hibaüzenetet kaptam:
    hiba: could not find driver

    Notice: Undefined variable: dbh in C:\xampp\htdocs\munka\index.php on line 122
    Nincs adatbĂĄzis kapcsolat
    Mutasd a teljes hozzászólást!
  • Még ez a sor is kell a php.ini-be:


    extension=php_pdo_mssql.dll

    meg persze a php/ext könyvtárban is ott kell lennie

    szerk.
    mysql javítva mssql-re
    Mutasd a teljes hozzászólást!
  • Agyam eldobom ettől a Xampp-tól.

    Mivel foglalt a 80-as port (gondolom a MS SQL server miatt) átraktam 8080-as portra az Apach servert.

    Majd letöltöttem ezt a dll-t.
    php_pdo_mssql.dll + php.ini: extension=php_pdo_mssql.dll

    azt irta hiányzik ez a dll:ntwdblib.dll
    letöltöttem felmásoltam több helyre is.

    Majd azt irta a xampp, hogy hiányzik php_pdo.dll
    letöltöttem bemásoltam + php.ini: extension=php_pdo.dll

    Ezután a hiba változatlan, ugyanúgy hiányolja a php_pdo.dll-t......
    Mutasd a teljes hozzászólást!
  • A dll-ek verziója sem mindegy ám! Nem minden, a neten található dll kompatibilis épp a nálad lévő php-val. Meg az sem mindegy, hogy thread safe (ts) vagy non-thread safe (nts) verzió.

    Amúgy sqlsrv drivereket elviekben egyszerű beállítani:
    "csak" le kell tölteni a microsoft oldaláról az 5.5.1-es php-hez valót (te tudod, hogy milyen változatot töltöttél le php-ból, vc6 vagy vc9-cel fordítottat), azokat bemásolnod a php/ext könyvtárba, php.ini-be beírod a két filet az extension-ök közé és újraindítod a webszervert. Utána még előfordulhat, hogy hiányolni fogja a gépedről az mssql native client nevű okosságot, azt is be kell szerezni az MS oldaláról (msi telepítőt tudsz letölteni), installálod és onnantól működik.

    (A 80as portot nem a skype fogja véletlen?)



    PHP Version 5.5.1 használok.

    vs
    Amit használok: PHP Version 5.4.16


    Most akkor melyiket is?
    Mutasd a teljes hozzászólást!
  • Nincs feltelepítve a Skype a gépre.

    Most letisztáztam, letöröltem az egész XAMPP-ot.

    Ezt a verziót feltelepítem:
    xampp-win32-1.8.2-1-VC9-installer.exe

    Ez a Php verzió lesz hozzá:
    PHP Version 5.4.16

    és elvileg ez a csomag kompatibilis ezzel a verzióval:
    Download Microsoft Drivers 3.0 for PHP for SQL Server from Official Microsoft Download Center

    de ez a csomag még mindig nem tartalmazza
    php_pdo_mssql.dll-t.

    Amit meg letöltöttem gondolom, nem volt vele kompatibilis.

    Mutasd a teljes hozzászólást!
  • Mivel ez a csomag az sqlsrv dll-eket tartalmazza, ami lényegében az mssql újabb változata (mondhatni olyan viszonyban vannak egymással, mint a mysql és a mysqli). Tehát ebben lesz majd php_pdo_sqlsrv.dll (vc9 és szerintem nts verzió), ami jó lesz neked.

    Onnantól meg az sqlsrv_* függvényeket kell majd php-n belül használnod. Ezekhez php.net-en találsz leírást. Meg a microsoft oldalán is van róluk.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd