【发布时间】:2012-05-30 11:51:27
【问题描述】:
我在 Linux Debian 6 x64 上安装了 Apache 2.2.16 和 PHP 5.4.3。
要安装适用于 Linux 的 MSSQL Server 的本机 ODBC 驱动程序,我使用以下说明: http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/
我以这种方式配置了我的 odbc.ini 文件:
[mydsn]
Driver = SQL Server Native Client 11.0
Database = datbase
Server = xxx.xxx.xxx.xxx,port
和我的 odbcinst.ini 这样:
[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
为了测试,我运行以下命令:
$ isql -v mydsn dbusername dbpassword
我成功了:
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
然后,使用 phpize 在 PHP 5.4 上安装 unixODBC,使用以下命令: (使用第一个命令ln -s ...是因为./configure在默认位置找不到php的头文件)
$ sudo ln -s /usr/include/php5 /usr/include/php
$ phpize
$ ./configure --with-pdo-odbc=unixODBC && make && make test
$ sudo make install
在我的 phpinfo() 上,我得到:
PDO support - enabled
PDO drivers - odbc
PDO Driver for ODBC (unixODBC) - enabled
ODBC Connection Pooling - Enabled, strict matching
现在是时候在 PHP 5.4 脚本上测试所有内容了:
<?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>";
}
?>
但它不起作用...我收到此错误消息:
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
所以我的问题是:发生了什么?我缺少什么配置? 如何在 Linux 和 PHP 5.4 上正确设置 MSSQL Server 的 Native ODBC Driver?
Ps.:当我尝试使用 odbc_connect() PHP 时说该函数不存在。
【问题讨论】:
-
注意肯定有问题 - 只是尝试提供建议,直到合适的人打开问题。 1)检查“无法打开”目录的权限 - 确保 apache(或 www,或任何 PHP 运行方式)可以读取/打开该目录/文件。 2) 您是否为 PHP PDO 尝试过“通用”而不是“unixODBC”?
-
抱歉,“通用”是什么意思?我该如何测试?
-
当你用“--with-pdo-odbc=unixODBC”编译时,还有一个“--with-pdo-odbc=generic,dir,libname,ldflags,cflags”版本——没有想知道它是否会起作用,因为我从来没有做过,但是如果没有其他人给出任何指示,只是向你扔一些东西来尝试。
-
我最近得到了一个更新版本的驱动程序,在 Ubuntu 16.04 和 php7 上运行良好,见这里:stackoverflow.com/a/37312824/55267
标签: php sql-server linux odbc