Странная ошибка при работе с zend framework

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'SQLSTATE[28000] [1045] Access denied for user 'liveaide_dbuser1'@'lynx-u.znetindia.net' (using password: YES)' in /home/liveaide/public_html/aider20test/zyberops/library/Zend/Db/Adapter/Pdo/Abstract.php:144 Stack trace: #0 /home/liveaide/public_html/aider20test/zyberops/library/Zend/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect() #1 /home/liveaide/public_html/aider20test/zyberops/library/Zend/Db/Adapter/Abstract.php(447): Zend_Db_Adapter_Pdo_Mysql->_connect() #2 /home/liveaide/public_html/aider20test/zyberops/library/Zend/Db/Adapter/Pdo/Abstract.php(235): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array) #3 /home/liveaide/public_html/aider20test/zyberops/library/Zend/Db/Adapter/Abstract.php(705): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Select), Array) #4 /home/liveaide/public_html/aider20test/zyberops/application/modules/default/models/Users.php(33): Zend_Db_Adapter_Abstract->fetchAll(Object(Zend_Db_Sel in /home/liveaide/public_html/aider20test/zyberops/library/Zend/Db/Adapter/Pdo/Abstract.php on line 144

в config.ini

[общие] db.adapter = PDO_MYSQL db.config.host = xxxhost db.config.username = имя пользователя db.config.password = пароль db.config.dbname = dbname

acl.roles.user = ноль acl.roles.admin = пользователь

в index.php

$config     = new Zend_Config_Ini('./application/config.ini','general');
$registry   = Zend_Registry::getInstance();
Zend_Registry::set('config',$config);

$db         = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('db',$db);

мы предоставили все учетные данные очень точно, но всякий раз, когда мы пытаемся получить доступ к базе данных [loginAction], мы получаем указанную выше ошибку. Также действие, содержащее операции с базой данных, отображает ошибку.... В локальном хосте все работает нормально....


person Nisanth Kumar    schedule 12.01.2010    source источник


Ответы (2)


Это определенно проблема аутентификации:

Различные результаты Google для SQLSTATE [28000] [1045] указывают на ошибки аутентификации. Вы можете попробовать сделать liveaide_dbuser1'@'localhost вместо liveaide_dbuser1'@'lynx-u.znetindia.net. Возможно, есть некоторые проблемы ... но только если сервер БД находится на веб-сервере.

Вы уверены, что у вас правильные учетные данные для аутентификации?

Изменить: Хорошо, вместо того, чтобы делать:

$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());

Ты можешь сделать:

$db = Zend_Db::factory('pdo', array('user'=>'MyDbUser', 'pass' => 'MyPassword', etc);

Итак, мы можем быть уверены, что передаются правильные значения? (Замените моими примерами фактические правильные аргументы).

person mr-sk    schedule 12.01.2010
comment
да я уверен, что это правильно. потому что мы проверили с обычным подключением к базе данных php. там нормально работает.... - person Nisanth Kumar; 12.01.2010
comment
мы проверили с обычным подключением к базе данных php. Вы имеете в виду, что не используете pdo? Как вы проверяли? - person mr-sk; 12.01.2010
comment
Убедитесь, что у пользователя есть соответствующие разрешения для базы данных. Кажется, это шаг, который я всегда забываю. - person Eric Coleman; 12.01.2010
comment
‹?php $host = 'xxxhost'; $db = 'тестовая база данных'; $user = 'испытатель'; $passwd = 'прохождение теста'; $con = mysql_connect($host,$user,$passwd); if($con) {$sel_db = mysql_select_db($db,$con); if($sel_db) { echo Успешное подключение к базе данных; $sql = выберите * из пользователей; $res = mysql_query($sql); в то время как ($ row = mysql_fetch_array ($ res)) { echo $ row ['user_id']; } } else { эхо не может выбрать базу данных; } } иначе эхо не может подключиться к базе данных; как и код выше, он работает, и мы получили ответ - person Nisanth Kumar; 12.01.2010

Вы должны протестировать PDO, если используете адаптер Zend_Db_Adapter_Pdo_Mysql. Тестирование с помощью простого ext/mysql API не сравнивает яблоки с яблоками.

<?php
$pdo = new PDO("mysql:host=lynx-u.znetindia.net;dbname=test", 
    "liveaide_dbuser1", "XXXX");
echo "Test successful"; // no exception thrown
?>

(Конечно, введите свой пароль вместо XXXX)

Запустите этот тестовый PHP-скрипт на том же хосте, на котором запущено ваше приложение Zend Framework. Это важно, потому что одно и то же имя пользователя может работать при подключении с одного хоста, а не с другого хоста. Имя пользователя может даже быть авторизовано для подключения с помощью метода обратной связи (например, «localhost»), но не с того же хоста, если вы вызываете IP, указав имя хоста.

Если этот абзац не имеет для вас никакого смысла, прочтите доступ к MySQL Система привилегий, пока это не имеет смысла.

person Bill Karwin    schedule 12.01.2010