-1

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 でスローされました

4

2 に答える 2

-1

データベース ハンドルの連結に問題があります。
最初にdsnを作成する場合は、それをハンドラーで使用します。

$dsn = 'mysql:host='.$connection[0].';dbname='.$connection[1].'';
$dbh = new PDO($dsn, $connection[2], $connection[3]);
于 2013-05-12T18:43:24.443 に答える
-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);
}

個人的には、DSN、パラメーター、およびオプションの 3 種類の設定を使用して、PDO の構成に一貫性ない理由がわかりません。
PDOに一連の設定をフィードできないのはなぜですか-それは謎です。

于 2013-05-12T18:50:39.173 に答える