为什么在执行 sql 脚本之前获取连接() 时zend_db不起作用


why the zend_db does not work when I getConnection() before executing the sql script

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);

顺便说一句,问得好的问题。