【问题标题】:Connecting to MsSql Db through Zend framework SQLSTATE[] (null) (severity 0)通过 Zend 框架 SQLSTATE[] (null) (severity 0) 连接到 MsSql Db
【发布时间】: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


【解决方案1】:

检查您的 freetds 配置和 resources.db.params.host = "host" 设置

之前我使用此配置连接 RHEL 上的 php 5/ZF 1.x - 但也许会有所帮助。 host 是 SQL Server 的地址,[my-server-name] 只是配置文件中的部分名称。

/usr/local/etc/freetds.conf
[my-server-name]
host = 10.0.0.1
port = 1433
tds version = 8.0

然后在 app.ini 中我使用了(host == freetds.conf 中的配置条目)

db.config.host      = my-server-name
db.config.username  = user
db.config.password  = pass
db.config.dbname    = DBNAME

(我的 app.ini db.config 条目应与您的 resources.db.params 对应)

【讨论】:

  • 但是我的 var/www 中有其他项目,如果我更改 freetds 文件中的配置,它们会起作用吗?我虽然配置应该在 php.... 我会试试的!谢谢。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 2017-03-25
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2017-05-14
  • 1970-01-01
相关资源
最近更新 更多