0

我正在将目前在 ZendFramework1(ZF1) 上运行的应用程序升级到 ZendFramework2(ZF2)。我无法让数据库结果从 ZF2 连接返回。

在 ZF1 中,此测试完美运行:

$db = Zend_Db::factory('Pdo_Mssql', array(
    'host'     => 'ServerNameFromFreeTdsConfig',
    'charset'   => 'UTF-8',
    'username' => 'myUsername',
    'password' => 'myPassword',
    'dbname'   => 'database_name',
    'pdoType'  => 'dblib'
));

$stmt = $db->prepare("select * from Products");
$stmt->execute();
$result = $stmt->fetchAll();
$stmt->closeCursor();

但是,我一直在 ZF2 中尝试过这个,但我并没有真正取得任何进展。在我的 config\autoload\global.php 我有:

return array(
    'db' => array(
        'host'  => 'ServerNameFromFreeTdsConfig',
        'charset'   => 'UTF-8',
        'dbname'  => 'database_name',
        'username'  => 'myUsername',
        'password'  => 'myPassword',
        'driver'    => 'pdo',
        'pdodriver' => 'dblib',
    ),
);

在 Module.php 文件中:

public function onBootstrap(MvcEvent $e)
{
    $eventManager        = $e->getApplication()->getEventManager();
    $moduleRouteListener = new ModuleRouteListener();
    $moduleRouteListener->attach($eventManager);

    $config = $e->getApplication()->getServiceManager()->get('Configuration');
    $dbAdapter = new Adapter($config['db'], new SqlServer());

    GlobalAdapterFeature::setStaticAdapter($dbAdapter);
}

然后在 Model\Products.php

class Products extends AbstractTableGateway
{
    protected $table;
    protected $featureSet;

    public function __construct($table = 'Products') {
        $this->table = $table;
        $this->featureSet = new FeatureSet();
        $this->featureSet->addFeature(new GlobalAdapterFeature());
        $this->initialize();
    }

    //Test the connection.
    public function getProducts() {   
        $result = $this->getAdapter()->query("select * from Products", Adapter::QUERY_MODE_EXECUTE);
die(var_dump($result));
    }
}

看起来它正在连接,因为上面的“var_dump”返回了一个正确的 ["fieldCount":protected]=> int(7) (该表中有 7 列)。但是,它没有返回任何结果。我需要做什么才能让它在 ZF2 中工作?我是否需要使用 ZF1 Zend_Db_Adapter_Pdo_Mssql.php 文件中的代码以某种方式扩展 Zend\Db\Adapter\Adapter?还是我缺少一些简单的解决方案?

感谢您的任何见解。

4

2 回答 2

0

我认为您不需要提及用户名和密码

resources.db.adapter = "sqlsrv"
resources.db.host = "localhost\SQLEXPRESS"
resources.db.dbname = "DatabaseName"
resources.db.isDefaultTableAdapter = true 
resources.db.driver_options.ReturnDatesAsStrings = true
于 2013-02-07T18:46:03.003 回答
0

我最终编写了自己的适配器,该适配器采用了我在那里工作的 Zend Framework 1 适配器。如果有人在这篇文章中寻找相同问题的解决方案并想要我转置的代码的副本,请告诉我。有很多代码,或者我会在这里发布。

于 2013-02-14T17:38:15.970 回答