PHP 5.6, PDO MySql-соединение в Unix (LAMPP) - фатальная ошибка: SQLSTATE[HY000] [1045]
Я пытаюсь реализовать CMS в MVC с ООП PHP.
Я использую Unix System (Ubuntu 14) и LAMPP (XAMPP) в качестве сервера.
В моем config.php я извлекаю информацию для соединения с базой данных из файла XML.
Я пробую эти методы, прежде чем получить соединение MySql с PDO в PHP, и оно работает.
В этом случае я делаю две вещи по-разному: во-первых, я получаю информацию о соединении MySql из файла XML. Во-вторых, я работаю в системе Unix.
Stackru пометил эти Вопросы как дубликаты, но я не могу с этим ответить. Может быть, вы можете взглянуть и объяснить это для новичка;)
config.php:
final class Config {
/**************************************************************************/
/*PRIVATE FUNCTION*/
/*
* GET XML CONTENT
*/
private static function getXmlContent($file){
//set xml file
$xmlFile = URL.$file;
//get content
$xmlContent = simplexml_load_string(file_get_contents($xmlFile));
//json encode
$xmlJSON = json_encode($xmlContent);
//json decode to assoc array
$xmlArr = json_decode($xmlJSON, true);
return $xmlArr;
}
/**************************************************************************/
/*PUBLIC FUNCTION*/
/*
* MYSQL
* @return $mySql (array, assoc)
*/
public static function db(){
$database = Config::getXmlContent('database.xml');
$mySql = array(
'type' => (string) $database['type'],
'host' => (string) $database['host'],
'database' => (string) $database['database'],
'port' => (string) $database['port'],
'socket' => (string) $database['socket'],
'user' => (string) $database['user'],
'password' => (string) $database['password'],
'prefix' => (string) $database['prefix']
);
//return
return (array) $mySql;
}
/*
* PDO
* @return $pdo (array, assoc)
*/
public static function pdo(){
$pdo = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
//return
return (array) $pdo;
}
}
database.xml:
<?xml version="1.0" encoding="UTF-8"?>
<sql>
<type>mysql</type>
<host>localhost</host>
<database>database</database>
<port>3306</port>
<socket></socket>
<user>user</user>
<password>password</password>
<prefix>prefix_</prefix>
Библиотека /model.php:
class Model {
//CONSTRUCT
function __construct(){
//init database
$this->database = new Database(Config::db(), Config::pdo());
}
}
Библиотека /database.php:
class Database extends PDO {
/*
* CONSTRUCT
*
* @param $sql (array)
* $pdo (array)
*
* stackru:
* https://stackru.com/questions/11622317/error-on-my-pdo-construct-php
* https://stackru.com/questions/19582469/uncaught-exception-pdoexception-with-message
*
* phpManuel:
* http://php.net/manual/de/pdo.construct.php
*/
public function __construct($sql, $pdo) {
/*
* PARENT CONSTRUCT
*
* @param $dsn (string)
* $username (string)
* $passwd (string)
* $options (array)
*/
parent::__construct($sql['type'].':host='.$sql['host'].';port='.$sql['port'].';dbname='.$sql['database'], $sql['user'], $sql['password'], $pdo);
}
}
Сообщение об ошибке PHP:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1045] Access denied for user 'user'@'localhost' (using password: YES)' in /opt/lampp/htdocs/xxx/application/lib/Database.php:37 Stack trace: #0 /opt/lampp/htdocs/xxx/application/lib/Database.php(37): PDO->__construct('mysql:host=loca...', 'user', 'password', Array) #1 /opt/lampp/htdocs/xxx/application/lib/Model.php(18): Database->__construct(Array, Array) #2 /opt/lampp/htdocs/xxx/application/lib/Controller.php(19): Model->__construct() #3 /opt/lampp/htdocs/xxx/application/control/index.php(13): Controller->__construct() #4 /opt/lampp/htdocs/xxx/application/lib/Application.php(61): Index->__construct() #5 /opt/lampp/htdocs/xxx/application/lib/Application.php(168): Application->loadDefaultController() #6 /opt/lampp/htdocs/xxx/index.php(40): Application->init() #7 {main} thrown in /opt/lampp/htdocs/xxx/application/lib/Database.php on line 37
Я новичок в Unix и использую терминал, поэтому, пожалуйста, запишите небольшое описание, если я должен его использовать.
Я надеюсь, что вы можете помочь мне так быстро, как можете.
Благодарю вас!
1 ответ
Во-первых, проверьте учетные данные вашей базы данных для пользователя в вашей конфигурации. Если вы не найдете ничего с этим, попробуйте войти $sql
массив, прежде чем передать его parent::__construct()
и проверьте, нет ли здесь каких-либо ошибок с учетными данными пользователя.