Mam Apache 2.2.16 i PHP 5.4.3 na Linux Debian 6 x64.Natywny sterownik ODBC serwera dla Linux i PHP 5.4
Aby zainstalować sterownik ODBC Native MSSQL Server dla systemu Linux, używam następujących instrukcji: http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/
skonfigurowałem mój ODBC.INI plik w ten sposób:
[mydsn]
Driver = SQL Server Native Client 11.0
Database = datbase
Server = xxx.xxx.xxx.xxx,port
i moją ODBCINST.INI ten sposób:
[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
Threading=1
UsageCount=1
Aby przetestować, uruchomić następujące polecenie:
$ isql -v mydsn dbusername dbpassword
I mam sukces:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
Następnie użycie phpize zainstalować unixodbc na PHP 5.4, używając tego: (pierwsze polecenie ln -s ..., ponieważ jest używany ./ skonfigurować nie może znaleźć nagłówki PHP w domyślnej lokalizacji)
$ sudo ln -s /usr/include/php5 /usr/include/php
$ phpize
$ ./configure --with-pdo-odbc=unixODBC && make && make test
$ sudo make install
na moim phpinfo() uzyskać:
PDO support - enabled
PDO drivers - odbc
PDO Driver for ODBC (unixODBC) - enabled
ODBC Connection Pooling - Enabled, strict matching
Teraz nadszedł czas, aby przetestować wszystko na PHP 5.4 skryptu:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
$conn = new PDO('odbc:DSN=mydsn;UID='.$usr.';PWD='.$psw);
$query = 'select * from my_table';
$stmt = $conn->prepare($query);
$stmt->execute();
while ($row = $stmt->fetch()) {
echo "<pre>";
print_r($row);
echo "</pre>";
}
?>
Ale to nie działa ... Mam ten komunikat o błędzie:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[01000] SQLDriverConnect: 0
[unixODBC][Driver Manager]Can't open lib '/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0' : file not found'
in /var/www/testemssql.php:17
Stack trace:
#0 /var/www/testemssql.php(17): PDO->__construct('odbc:DSN=mydsn...')
#1 {main} thrown in /var/www/testemssql.php on line 17
Więc moje pytanie brzmi: co to jest zdarzyć? Jakiej konfiguracji brakuje? Jak poprawnie ustawić macierzysty sterownik ODBC serwera MSSQL na Linux i PHP 5.4?
Ps .: Kiedy próbuję użyć odbc_connect() PHP mówi, że funkcja nie istnieje.
Zauważ, że problem jest prosty - po prostu próbuj zaproponować sugestie, aż właściwa osoba otworzy pytanie. 1) Sprawdź uprawnienia do katalogu "nie można otworzyć" - upewnij się, że apache (lub www, lub jakikolwiek inny PHP działa) może odczytać/otworzyć ten katalog/plik. 2) Czy próbowałeś "ogólnego", a nie "unixODBC" dla PHP PDO? – Robbie
Przepraszam, co miałeś na myśli przez "rodzajowy"? jak mogę to przetestować? – vinigarcia87
Podczas kompilacji z opcją "--with-pdo-odbc = unixODBC" dostępna jest również wersja "--with-pdo-odbc = generic, dir, libname, ldflags, cflags" - nie ma pojęcia, czy będzie działać jako Nigdy tego nie robiłem, ale po prostu rzuciłem coś na ciebie, żeby spróbować, jeśli nikt nie daje żadnych wskazówek. – Robbie