如何通过 PHP 和 Linux 使用 pdo 连接到 mssql?

Posted

技术标签:

【中文标题】如何通过 PHP 和 Linux 使用 pdo 连接到 mssql?【英文标题】:How to connect to mssql using pdo through PHP and Linux? 【发布时间】:2011-08-22 16:06:46 【问题描述】:

我正在尝试使用以下代码建立新的 PDO 连接。

new PDO("mssql:driver=????;Server=$serverName;Database=$databaseName", $username, $password, array(PDO::ATTR_PERSISTENT => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

我不确定要使用什么驱动程序?或者如何安装它们。我可以使用 php 中的 mssql_connect 函数完美连接,但我想改用 PDO 库。

我对 mssql 的 php.ini 设置是:

ssql

MSSQL Support   enabled
Active Persistent Links     0
Active Links    1
Library version     FreeTDS

Directive   Local Value Master Value
mssql.allow_persistent  On  On
mssql.batchsize 0   0
mssql.charset   no value    no value
mssql.compatability_mode    Off Off
mssql.connect_timeout   5   5
mssql.datetimeconvert   On  On
mssql.max_links Unlimited   Unlimited
mssql.max_persistent    Unlimited   Unlimited
mssql.max_procs Unlimited   Unlimited
mssql.min_error_severity    10  10
mssql.min_message_severity  10  10
mssql.secure_connection Off Off
mssql.textlimit Server default  Server default
mssql.textsize  Server default  Server default
mssql.timeout   60  60

【问题讨论】:

【参考方案1】:

PDO mssql驱动没有了,使用sqlsrv(php windows下)或dblib(php linux下)

http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx

http://www.php.net/manual/en/ref.pdo-dblib.php

【讨论】:

使用 dblib 仍然会产生缺少驱动程序的错误。 “未捕获的异常 'PDOException' 带有消息'找不到驱动程序'”。我觉得奇怪的是 mssql_connect 工作正常,但我必须做一些事情才能让 PDO 端正常工作。我对linux不是很熟悉,这意味着我不确定我需要整理的驱动程序吗? 你需要在你的 php.ini 中启用 pdo_dblib.so 并在 Linux 下设置 FreeTDS。 如何在配置中启用 pdo_dblib?我也在使用centos 5 32bit,我该如何设置? pdo_dblib 不再适用于 PHP 5.4+...我找不到适合此问题的解决方案。 @James PHP Microsoft PDO_SQLSRV 是否已弃用或使用它没有问题?【参考方案2】:

我正在运行 Ubuntu 14.04。尝试连接到 MSSQL 我得到“未捕获的异常 'PDOException' 和消息'找不到驱动程序'”。看来我错过了 dblib/sybase PHP 扩展。

我不得不跑:

sudo apt-get install php5-sybase freetds-common libsybdb5 \ 
&& sudo apache2ctl restart

现在工作正常。

【讨论】:

php-sybase 包为我解决了这个问题。我不需要安装其他的。【参考方案3】:

试试

$dbh = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");

$hostname may need to be configured as either...
$hostname.':'.$port;

$hostname.','.$port;

【讨论】:

我收到的错误消息是未捕获异常 'PDOException' 和消息'找不到驱动程序'【参考方案4】:

Karl Wilbur 发布的 dblib/sybase PHP 扩展技巧对我有用。 LimeSurvey 的安装前检查页面现在显示

PHP PDO 驱动程序库 - Microsoft SQL Server (dblib), mysql

只要确保找到并安装与您使用的 PHP 版本一致的版本即可;

Prompt>sudo apt-get install php<appropriate version>-sybase freetds-common libsybdb5 Prompt>sudo apache2ctl restart

干杯,

【讨论】:

以上是关于如何通过 PHP 和 Linux 使用 pdo 连接到 mssql?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP PDO 从 Mac 连接到 Sql Server?

通过 PDO ODBC 将 PHP 连接到 MSSQL

如何在 Windows 开发环境中在 PHP 中使用 PDO 和 MSSQL?

使用 PDO_DBLIB 连接到 MS SQL 数据库的 PHP 错误

PHP PDO 使用 SSL 连接到 MS SQLServer Express

使用带有 --ssl 的 PHP PDO 连接到 MySQL/MariaDB,无需证书