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的新生,我想结交一些朋友一起学习。提前谢谢。
Zend_Db本质上是许多RDBMS PHP模块的包装器,为Zend Framework提供单一的数据库抽象接口。这意味着你最终将使用Zend_Db以几乎相同的方式编写SQL请求,即使您使用MySQL,MSSQL,PostgreSQL等。
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::d oesNotExist() 福巴.php 5号线
因此,您可以调用getConnection()
来强制数据库层连接到RDBMS,但据我所知,getConnection()
不需要返回实际的资源/对象。您可以在Zend_Db文档中阅读有关getConnection()的更多信息,以及为什么有人需要该资源,请参阅文档 - http://framework.zend.com/manual/en/zend.db.adapter.html
您应该像往常一样继续申请:
$sql = 'select * from department';
$resource = $dbAdapter->getConnection();
$results = $dbAdapter->fetchAll($sql);
顺便说一句,问得好的问题。