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 пометил эти Вопросы как дубликаты, но я не могу с этим ответить. Может быть, вы можете взглянуть и объяснить это для новичка;)

MySQL ERROR 1045 (28000): доступ запрещен для пользователя 'bill'@'localhost' (используется пароль: YES)

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() и проверьте, нет ли здесь каких-либо ошибок с учетными данными пользователя.

Другие вопросы по тегам