用于Linux和PHP 5.4的MSSQL服务器的本地ODBC驱动程序

我在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/

我这样configuration我的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 

为了testing,我运行以下命令:

 $ 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脚本上testing一切:

 <?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 

所以我的问题是:发生了什么? 我错过了什么configuration? 如何在Linux和PHP 5.4上正确设置MSSQL服务器的本地ODBC驱动程序?

Ps .:当我尝试使用odbc_connect()时PHP表示函数不存在。

Solutions Collecting From Web of "用于Linux和PHP 5.4的MSSQL服务器的本地ODBC驱动程序"

我知道这有点晚了,但是因为我打这个线程,而我的头反对完全相同的问题,这里有一些建议任何人在未来遇到它:-)

1)检查libsqlncli-11.0.so.1790.0上的权限,以确保Apache正在运行的用户可以访问它(应该已经读取并执行)

2)使用ldd检查是否缺少任何依赖关系 – 基于isql正在工作的事实,我会说他们确定(提示:您正在寻找“not found”):

ldd /opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0

3)尝试从命令行运行你的PHP脚本,而不是通过Apache。 如果是这样的话,就去停止4.如果没有,我会建议通过strace来看看它实际上在做什么。

4)这是为我做的! 尝试关闭SELinux(即设置为不强制/允许模式),再次点击Apache中的页面。 我不确定到底是什么东西阻塞了(还没有时间或意图去深入细节),但一旦失去了一切,就像魅力一样。 对于任何有倾向的人,我都可以深入研究,弄清楚如何解决这个问题,而不是完全禁用:-)

精确的命令禁用SELinux可能会有所不同,根据您的操作系统,但对我来说(在CentOS上)这工作:

http://rbgeek.wordpress.com/2012/08/06/how-to-disable-selinux-on-centos-without-rebooting/

祝你好运!

用于Linux的MSSQL服务器的本地ODBC驱动程序有一个错误

要正确连接MS SQL server,请使用FreeTDS查看更多详细信息: Linux上的PHP 5.4:如何与MS SQL server 2008连接?

除了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 UsageCount=1 

删除此行后重试:

 Threading=1 

而你的PHP脚本对我来说工作得很好。

希望这可以帮助你。

我从来没有机会自己尝试,但我听说php5-sybase工作正常,我知道在Debian和Ubuntu的存储库。