我有一个运行 php 的系统,我最近需要添加到 MSSQL 数据库的连接。我已经正确安装/配置了 FreeTDS 和 UnixODBC,我可以在 python 中以及通过 tsql 和 isql 等实用程序进行成功的查询。查看后phpinfo()
发现我没有“sqlsrv”部分,并且mssql.so
我的 php 扩展目录中没有文件。
我想将它添加到我的系统中,而无需重新编译/安装 php。我能否找到并下载该mssql.so
文件,将其放入我的扩展目录,添加extension=/path/to/mssql.so
到我的php.ini
文件中,然后重新加载 apache 以使其正常工作?还是我需要采取更多步骤?
编辑:
系统使用 PHP 5.2 运行 SLES11
编辑2:
我已经成功安装了 php5-mssql 扩展。我抓住了源代码,提取了它,然后复制了这些文件:
ext/mssql/config.m4
ext/mssql/php_mssql.c
ext/mssql/php_mssql.h
然后,在我将文件复制到的目录中,我运行phpize
(您需要安装php5-devel
才能获得此工具),并像这样编译扩展:
./configure --with-mssql=/usr/local/freetds
make
我还必须添加一行并注释掉一行,php_mssql.c
然后它才能真正正确编译(不是每个人都需要这样做):
{NULL,NULL,NULL}
/*PHP_FE_END*/
这在 /php_mssql/modules/ 中创建了 mssql.so 文件(相对于我编译代码的位置),我可以将其移动到我的扩展目录(您可以使用 找到它php -i | grep extensions
)。我添加extension=mssql.so
到我的 php.ini 文件中;但是,仍然没有 'sqlsrv 部分在phpinfo()
.
一些连接方法似乎部分有效:
从 shell 运行以下代码时,<h1>Connection Success</h1>
显示;但是在浏览器中打开时,该mssql_connect
行之后没有显示:
<?php
//*************************************************************************
//Open Database Connection
//*************************************************************************
//phpinfo();
$dbserver="MyServer";
$dbusername="user";
$dbpassword="pass";
$defaultdb="DBName";
$cn = mssql_connect($dbserver,$dbusername,$dbpassword) or die("Connection Error");
$db = mssql_select_db($defaultdb,$cn) or die("Database Error");
echo "<h1>Connection Success</h1>";
?>
所以看起来我部分地以这种方式建立了联系?当我尝试使用 PDO 对象时,我收到另一个错误:
代码:
<?php
$con = new PDO('odbc:host=MyServer;dbname=DBName','user','pass');
?>
错误:
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[IM002] SQLDriverConnect: 0 [unixODBC][Driver Manager]Data source name not found, and no default driver specified' in /path/to/php/file/test3.php:3
Stack trace:
#0 /path/to/php/file/test3.php(3): PDO->__construct('odbc:host=MySer...', 'user', 'pass')
#1 {main}
thrown in /path/to/php/file/test3.php on line 3
我还尝试了以下方法(假设前面代码中的 PDO 语句/DSN 不正确):
<?php
try {
$db = new PDO("odbc:Driver=FreeTDS; Server=MyServer; Port=1433; Database=DBName; UID=user; PWD=pass;");
} catch (PDOException $exception) {
die("$exception");
}
echo "<h1>Success!</h1>";
?>
这<h1>Success!</h1>
从 shell 显示,但在我的网络浏览器中显示以下错误:
exception 'PDOException' with message 'SQLSTATE[08001] SQLDriverConnect: 0 [unixODBC][FreeTDS][SQL Server]Unable to connect to data source' in /path/to/php/file/test4.php:3 Stack trace: #0 /path/to/php/file/test4.php(3): PDO->__construct('odbc:Driver=Fre...') #1 {main}