gpt4 book ai didi

php - 适用于 Linux 和 PHP 5.4 的 MSSQL Server 的 native ODBC 驱动程序

转载 作者:IT王子 更新时间:2023-10-28 23:55:06 26 4
gpt4 key购买 nike

我在 Linux Debian 6 x64 上安装了 Apache 2.2.16 和 PHP 5.4.3。

要为 Linux 安装 MSSQL Server 的 native 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的headers)

$ 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 驱动程序?

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

最佳答案

我知道这有点晚了,但是因为我在撞到这个问题的同时碰到了这个线程,所以这里有一些建议供以后遇到它的任何人使用:-)

1) 检查 libsqlncli-11.0.so.1790.0 的权限以确保 Apache 正在运行的任何用户都可以访问它(应该具有读取和执行权限)

2) 使用 ldd 检查是否缺少任何依赖项 - 基于 isql 在上面工作的事实我会说它们没问题(提示:你正在寻找“未找到”):

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

3) 尝试从命令行而不是通过 Apache 运行 php 脚本。如果它能正常工作,请转到第 4 步。如果没有,我建议运行 strace 以查看它实际在做什么。

4) 这是为我做的!尝试关闭 SELinux(即设置为不强制/许可模式)并再次点击 Apache 中的页面。我不确定它究竟阻止了什么(还没有时间或倾向进入细节)但是一旦它关闭,一切都像魅力一样。对于任何有这种倾向的人,我是你可以深入研究它并弄清楚如何在不完全禁用的情况下解决这个问题:-)

禁用 SELinux 的具体命令可能会因您的操作系统而异,但对我来说(在 CentOS 上)这是有效的:

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

祝你好运!

关于php - 适用于 Linux 和 PHP 5.4 的 MSSQL Server 的 native ODBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10728290/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com