Mysql 接続配列を作成し、それを次のように接続メソッドに渡します。
$database->connect(array(ROOT_DB_HOST,
ROOT_DB_NAME, ROOT_DB_USERNAME, ROOT_DB_PASSWORD));
print_r()
connect メソッド内の配列を使用すると、期待どおりの結果が得られます。
Array
(
[0] => localhost
[1] => dbname
[2] => dbuser
[3] => dbpass
)
ただし、接続メソッド内で、配列値を 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());
}
}
エラー:
Notice: 未定義のオフセット: 16 行目の database.class.php の 0 Notice: 未定義のオフセット: 16 行目の database.class.php の 1 Notice: 未定義のオフセット: 16 行目の database.class.php の 2 Notice: 未定義のオフセット: 16 行目の database.class.php の 3
致命的なエラー: database.class.php:20 のメッセージ 'SQLSTATE[28000] [1045] Access denied for user 'apache'@'localhost' (using password: NO)' を伴うキャッチされない例外 'Exception' スタック トレース: #0 sandboxx .php(16): Database->connect(Array) #1 {main} が 200 行目の database.class.php でスローされました