【发布时间】:2014-01-27 11:33:12
【问题描述】:
我从我的 mac 连接到 db (mssql) 时遇到问题。我已经用自制广告安装了 freetds 和 dblib,它们应该可以工作,但我的 phpinfo()说:
'--enable-pdo' '--with-pdo-sqlite' '--with-pdo-mysql=mysqlnd' '--with-readline=/usr/local/readline-6.2' '--with-libedit' '--with-pdo-pgsql' '--with-iconv' '--with-sqlite3' '--disable-phar' '--enable-xmlwriter' '--enable-xmlreader' '--enable-mysqlnd'
在此之后,在一个单独的部分:
Additional .ini files parsed: /usr/local/zend/etc/conf.d/pdo_dblib.ini, /usr/local/zend/etc/conf.d/mssql.ini,
然后:
pdo_dblib
PDO Driver for FreeTDS/Sybase DB-lib enabled
Flavour freetds
mssql
MSSQL Support enabled
Active Persistent Links 0
Active Links 0
Library version FreeTDS
我无法理解该库是否有效启用,因为使用以下配置连接会出现以下错误:
resources.db.adapter = pdo_mssql
resources.db.isDefaultAdapter = true
resources.db.params.host = "host"
resources.db.params.port = "port"
resources.db.params.username = "un"
resources.db.params.password = "pw"
resources.db.params.dbname = "name"
resources.db.params.pdoType = dblib
resources.db.params.charset= "utf-8"
错误:
SQLSTATE[] (null) (severity 0)
来自freenode上的##zftalk频道:
thats usually what you get when you use pdo->lastError() when no error has actually happened
这是我在 PHPinfo() 中的 mssql 支持
MSSQL Support enabled
Active Persistent Links 0
Active Links 0
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 On On
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 On On
mssql.textlimit Server default Server default
mssql.textsize Server default Server default
mssql.timeout 60 60
【问题讨论】:
-
禁用的扩展根本不会出现在 phpinfo() 的输出中并触发非常具体的 调用未定义的函数/找不到类 PHP 错误消息。但是 Zend 适配器真的叫
pdo_mssql而不是pdo_dblib? -
未捕获的异常 'Zend_Exception' 带有消息“文件“Zend/Db/Adapter/Pdo/Dblib.php”不存在或在文件中找不到类“Zend_Db_Adapter_Pdo_Dblib”...
-
你的 FreeTDS 配置怎么样?
-
PDO 会丢弃来自 MSSQL 的所有错误消息(但通常不会这么极端)。使用环境变量 TDSDUMP=/tmp/tds.log 运行一个裸脚本并检查 tds.log 文件。从底部向上的几十行应该是实际的错误消息。
标签: php sql-server apache zend-framework pdo