数组上的未定义偏移量但存在偏移量

时间:2013-05-11 22:02:03

标签: php arrays pdo offset

我创建一个Mysql连接数组并将其传递给connect方法:

 $database->connect(array(ROOT_DB_HOST, 
        ROOT_DB_NAME, ROOT_DB_USERNAME, ROOT_DB_PASSWORD));

当我print_r()连接方法中的数组时,我得到了我期望的结果:

Array
(
    [0] => localhost
    [1] => dbname
    [2] => dbuser
    [3] => dbpass
)

但是,在connect方法中,我将数组值传递给DSN字符串,并在0,1,2,3上接收和未定义的偏移量。这是DSN字符串:

$this->dbh = new PDO('mysql:host='. $connection[0] .';dbname=' . $connection[1],     $connection[2], $connection[3]);

所以我将值作为数组传递并将它们插入PDO构造函数并接收错误,我不知道发生了什么,有什么想法?

方法:

public function connect($connection) {
    try {
        $this->dbh = new PDO('mysql:host='. $connection[0] .';dbname=' .  $connection[1], $connection[2], $connection[3]);
        $this->dbh->setAttribute(PDO::ATTR_ERRMODE,  PDO::ERRMODE_EXCEPTION);
        $this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch(PDOException $e) {
        throw new Exception($e->getMessage());
    }
}

错误:

  

注意:未定义的偏移量:第16行的database.class.php中的0注意:   未定义的偏移量:第16行的database.class.php中的1注意:   未定义的偏移量:第16行的database.class.php中的2注意:未定义   offset:第16行的database.class.php中的3

     

致命错误:未捕获   异常'异常',消息'SQLSTATE [28000] [1045]访问   拒绝用户'apache'@'localhost'(使用密码:NO)'in   database.class.php:20堆栈跟踪:#0 sandboxx.php(16):   在database.class.php中抛出的Database-> connect(Array)#1 {main}   第200行

2 个答案:

答案 0 :(得分:-1)

连接数据库句柄时遇到问题。如果你创建你的 dsn首先,然后在处理程序中使用它。

$dsn = 'mysql:host='.$connection[0].';dbname='.$connection[1].'';
$dbh = new PDO($dsn, $connection[2], $connection[3]);

答案 1 :(得分:-2)

在数组中存储常量有什么意义?为什么不使用它们呢? 此外,你有非常奇怪的处理异常的方法。

public function connect($connection) {
    $opt = array(
        PDO::ATTR_ERRMODE          =>  PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
    );
    $dsn = 'mysql:host='. ROOT_DB_HOST .';dbname='.ROOT_DB_NAME; 
    $this->dbh = new PDO($dsn, ROOT_DB_USERNAME, ROOT_DB_PASSWORD, $opt);
}

我个人不明白为什么PDO有这种不一致的配置,使用三种不同的设置 - DSN,参数和选项。
为什么你不能只用一系列设置来提供PDO - 这是一个谜。