【问题标题】:Zend Framework 2 Database ErrorZend Framework 2 数据库错误
【发布时间】:2015-05-07 13:54:19
【问题描述】:

我是刚开始学习 Zend Framework 2 的新手。当我按照教程http://framework.zend.com/manual/2.3/en/user-guide/database-and-models.html 进行操作时,我遇到了查找数据库的问题。

我发现它可以连接到localhost数据库,但找不到任何数据库。

连接错误:SQLSTATE[HY000] [1049] 未知数据库 'db_vote'

它只能找到数据库“mysql”。但是如果我在“mysql”中创建一个新表,就找不到新表。

另一件奇怪的事情是我在 phpmyadmin 中更改了我的 root 密码,但是在 zf2 中,如果我更改为新密码,它说访问被拒绝,但它可以使用旧密码。

好像 zend 正在连接到另一个“本地主机”?奇怪的想法... 任何人都可以帮助我吗?提前致谢。

Module.php 中的代码:

public function getServiceConfig(){
    return array(
        'factories' => array(
            'Album\Model\AlbumTable' => function($sm){
              $tableGateway = $sm->get('AlbumTableGateway');
              $table = new AlbumTable($tableGateway);
              return $table;  
            },
            'AlbumTableGateway' => function($sm){
              $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
              $resultSetPrototype = new ResultSet();
              $resultSetPrototype->setArrayObjectPrototype(new Album());
              return new TableGateway('album_zend', $dbAdapter, null, $resultSetPrototype); 
            },
        ),
    );
}

global.php:

return array(
'db' => array(
    'driver'        => 'Pdo',
    'dsn'           => 'mysql:dbname=db_vote; host=localhost',
    'driver_options'=> array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'' ),
),
'service_manager'   => array(
    'factories'     => array(
        'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
    ),
),
);

local.php:

return array(
'db' => array(
    'username' => 'root',
    'password' => 'xxxxxxx',
),
);

【问题讨论】:

  • 那么您的设置配置文件在哪里?你的代码在哪里?
  • 您是否创建了一个名为db_vote 的数据库?你应该可以用 phpmyadmin 做到这一点
  • 嗨,蒂姆,是的,我创建了一个名为 db_vote 的数据库。我什至尝试了本地主机中的每个数据库,它都显示未知数据库。只能访问mysql
  • 嗨,Alex,我附上了相关代码
  • 那台机器上只有一个数据库服务器吗? “好像 zend 正在连接到另一个“本地主机”?” - 你这是什么意思?

标签: php mysql database zend-framework


【解决方案1】:

问题:

root@localhost

root@%

可以是两个不同的用户。

如果您查看 mysql 数据库中的用户表,您会发现不止一个 root 用户。 Web 应用的用户可能与您通过控制台连接的用户不同。

如何调查:

检查通过控制台(或您使用过的任何其他工具)连接的用户:

SELECT USER();

确保您要么只使用一个用户(例如 root@localhost),要么确保 Web 应用用户拥有正确的权限:

USE mysql;
SELECT * FROM db;

每当您更改权限时,请不要忘记刷新它们:

FLUSH PRIVILEGES;

【讨论】:

  • 嗨,我检查了我只有一个 root@localhost,没有任何其他 root 用户。而且我还检查了mysql中的db表,权限设置是正确的。有没有可能一个本地主机可以有两个数据库?太奇怪了,我更改了root密码,但是从zf2我只能通过旧密码访问数据库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
相关资源
最近更新 更多