PDO异常 - 访问被拒绝

时间:2015-03-23 13:33:38

标签: php mysql pdo

我在php中构建一个登录系统,我的PDO收到了拒绝访问的错误。我的凭据是正确的,所以我不确定是什么导致了这一点。

这是例外

  

PHP致命错误:未捕获的异常' PDOException'与消息   ' SQLSTATE [HY000] [1045]访问被拒绝用户' root' @' localhost'   (使用密码:否)'

我还检查了phpMyAdmin中的权限,一切看起来都正确。

这是我的代码的一部分 希望有人看到我不会做的事情......

的init.php

<?php
session_start();

$GLOBALS['config'] = array(
    'mysql' => array(
        'host' => '127.0.0.1',
        'username' => 'root',
        'password' => '******',
        'db' => '*****'
    ),
    'remember' => array(
        'cookie_name' => 'hash',
        'cookie_expiry' => 604800
    ),
    'session' => array(
        'session_name' => 'user'
    )
);

spl_autoload_register(function($class){
    require_once 'classes/'.$class.'.php';
});

require_once 'functions/sanitize.php';

CONFIG.PHP

class Config {
    public static function get($path = null){
        if($path){
            $config = $GLOBALS['config'];
            $path = explode('/',$path);

            foreach($path as $bit){
                if(isset($config[$bit])){
                    $config = $config[$bit];
                }
            }

            return $config;
        }
        return false;
    }
} 

我的部分DB.php

class DB {
    private static $_instance = null;
    private $_pdo,
            $_query,
            $_error = false,
            $_results,
            $_count = 0;

    private function __construct(){
        try{
            $this->_pdo = new PDO('mysql:host='.Config::get('mysql/host').';dbname=' . Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password'));
            echo 'Connected!';
        }catch(PDOException $e){
            die($e->getMessage());
        }
    }

    public static function getInstance(){
        if(!isset(self::$_instance)){
            self::$_instance = new DB();
        }

        return self::$_instance;
    }

的index.php

require_once 'core/init.php';
$user = DB::getInstance();

1 个答案:

答案 0 :(得分:0)

您在配置上的静态方法不会迭代结构。 你提供数组(&#39; mysql / username&#39;)作为路径,它被分解为 &#39; MySQL的&#39;和&#39;用户名&#39;对于foreach和isset($ config [&#39; mysql&#39;])返回true然后将$ config设置为一个数组(包含来自&#39; mysql&#39;键的所有内容)然后返回数组,而不是你想要的值。

        foreach($path as $bit){
            if(isset($config[$bit])){
                $config = $config[$bit]; // <-- returns $config['mysql']
            }
        }