try
{
$dbAdapter = Zend_Db::factory($config->general->db->adapter, $config->general->db- >config->toArray());
// first
$sql = 'select * from department';
$results = $dbAdapter->fetchAll($sql);
// second
$db = $dbAdapter->getConnection();
$sql = 'select * from department';
$results = $db->fetchAll($sql);
}
catch (Zend_Db_Adapter_Exception $exc)
{
echo $exc->getTraceAsString();
}
catch (Zend_Exception $exc)
{
echo $exc->getTraceAsString();
}
当我使用第一种方式时,应用程序运行良好,但是当我使用第二种方式 - 获取连接然后运行sql脚本时,它不起作用,更糟糕的是应用程序被阻止在线上($ db-> fetchAll($ sql))并且不会返回任何错误。 是什么原因?有没有人遇到过这个问题?顺便说一句,我是学习PHP的新手,我想结交一些朋友一起学习。提前谢谢。
答案 0 :(得分:2)
Zend_Db本质上是许多RDBMS PHP模块的包装器,为Zend Framework提供单个数据库抽象接口。这意味着即使您使用的是MySQL,MSSQL,PostgreSQL等,您最终也会使用Zend_Db以相同的方式编写SQL请求。
getConnection()
方法将强制数据库连接,并将返回数据库层的实际底层资源/对象。即如果使用mysqli,getConnection()将返回一个mysqli类型的对象。 (http://www.php.net/manual/en/class.mysqli.php)
然后将mysqli实例类分配给$db
变量,并尝试调用fetchAll()
,但mysqli类中不存在fetchAll()
。此时可能会抛出一个错误,如果您没有错误报告,则会导致出现空白页。
例如,检查这段代码:
<?php
class A {}
$a = new A();
$a->doesNotExist();
这将抛出:
PHP致命错误:调用未定义的方法A :: doesNotExist() 第5行的foobar.php
因此,您可以调用getConnection()
来强制数据库层连接到RDBMS,但据我所知,getConnection()
不需要返回实际的资源/对象。您可以阅读有关getConnection()的更多信息以及为什么有人需要该资源,在Zend_Db文档中“管理延迟连接” - http://framework.zend.com/manual/en/zend.db.adapter.html
您应该按照通常的方式继续申请:
$sql = 'select * from department';
$resource = $dbAdapter->getConnection();
$results = $dbAdapter->fetchAll($sql);
顺便问一下,问题很好。