【问题标题】:Zend Framework 2 - Database connectionZend Framework 2 - 数据库连接
【发布时间】:2013-04-26 11:17:23
【问题描述】:

试图围绕 Zend Framework 2.0 的新概念展开思考。

我正在尝试连接到数据库,并在控制器或模型中获取该连接。 没什么特别的,只是运行查询的纯连接。

这是我当前的代码:

//module.config.php
return array(
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=DBNAME;host=HOSTNAME,
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
        'username' => 'USERNAME',
        'password' => 'PASSWORD',
    ),
    'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
            'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

我做错了什么?

【问题讨论】:

  • mysql:dbname=DBNAME;host=HOSTNAME is missing ' 结尾?

标签: php zend-framework2


【解决方案1】:

在 ./config/autoload 文件夹中创建 db.local.php 并添加以下内容

return array(
'db' => array(
    'driver'         => 'Pdo',
    'dsn'            => 'mysql:dbname=zenBlog;host=localhost',
    'username'       =>'root',
    'password'      =>'',
    'driver_options' => array(
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
    ),
),
'service_manager' => array(
    'aliases' => array(
'db' => 'Zend\Db\Adapter\Adapter',
),
),);

在您的控制器$this->getServiceLocator()->get('db'); 中访问数据库。

【讨论】:

  • 非常感谢,它的工作!你能告诉我如何访问这个模型/任何其他类的连接吗?
  • 如何将其修改为包含 2 个单独的连接,是否复制 aliases 中的 db 数组和 db 条目并将它们重命名为例如db2?
  • 我没试过,但我觉得可以通过复制和重命名别名来完成
【解决方案2】:

这就是我在 config\autoload\local.php 中的 local.php 的样子。

<?php
return array(
 'db' => array(
    'driver'         => 'Pdo',
     'dsn' => 'mysql:dbname=<dbname>;host=localhost',
     'username' => 'root',
     'password' => <your password here>,
     'driver_options' => array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
 ),
 ),
'service_manager' => array(
'aliases' => array(
'adapter' => 'Zend\Db\Adapter\Adapter',
),
),);

现在使用它来创建一个数据库适配器:

$adapter = $this->getServiceLocator()->get('adapter');

创建一个sql语句并放入变量$sql。 现在这样做:

$statement = $adapter->createStatement($sql);
$result = $statement->execute();

希望这会有所帮助。

【讨论】:

  • 那里的错字,我认为应该是 'dsn' 而不是 'dbn'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多