0

目標: MySQL データベースから単純に配列を取得すること。

問題: $dsn "string variable" を PDO ステートメントのパラメーターとして使用していますが、例外がキャッチされていないようで、ドライバーまたは (PDO->__construct) の呼び出しと関係があります。もちろん。$dsn 文字列変数またはこのコードの他の領域を修正して失敗する可能性がある方法について何かアイデアはありますか? 前もって感謝します。

// データベース パラメータを定義する

    $dbhost = "localhost";
    $dbname = "x";
    $dbuser = "y";
    $dbpass = "z";

// ドライバを呼び出します (変数文字列として)

    $dsn = "mysql:host=$dbhost;dbname=$dbname";

// 新しく作成された db オブジェクトに接続します

    $dbh = new PDO($dsn, $dbuser, $dbpass);

// PDO エラー モードを設定して例外を有効にします

    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

// データベースへのクエリを実行

    $sql = "SELECT * FROM a_aif_remaining";
    $sth = $dbh->prepare($sql);
    $sth->execute();

// クエリの結果を表示

    print("PDO::FETCH_ASSOC: ");
    print("Return next row as an array indexed by column name");
    $result = $sth->fetch(PDO::FETCH_ASSOC);
    print_r($result);
    print("");
    return $results;

// データベース接続を閉じる

    $dbh = NULL;

    ?>
4

2 に答える 2

1

コードを try catch ブロックに入れます。報告されたエラー メッセージを参照してください。この例を以下に示します。

try
{
  if ( !class_exists( 'PDO' ) )
    throw new Exception( 'PHP without PDO' );
  if ( array_search( PDO::getAvailableDrivers(), 'mysql' ) === false )
    throw new Exception( 'PHP without PDO mysql driver' );
  $dbh = new PDO( ... );
  ...
}
catch ( PDOException $e )
{
  print $e->getMessage();
}
catch ( Exception $e )
{
  print $e->getMessage();
}
于 2012-12-28T02:51:26.203 に答える
0

探している場所に問題はありません。文字列を変数に置き換えても問題はなく、問題が発生することはありません。だから、それは別の場所にあります。幸いなことに、PHP はそれを報告しましたが、不思議なことに、あなたはその報告にあまり注意を払いませんでした。

キャッチされていない例外があるようです

キャッチされない例外には、多くの場合、エラー メッセージが含まれています。
ほとんどの PHP エラー メッセージは非常に有益です。問題の説明を得るには、それらを一読する必要があります。結局のところ、それはあなたの唯一の情報源です。サーバーの何が問題なのかは誰にもわかりませんが、サーバー自体です。エラー メッセージの解釈に問題がある場合は、他の人に解釈してもらうために、質問と共に投稿することが不可欠です。したがって、表示されるすべてのエラー メッセージは、そのままの状態で質問に投稿する必要があります。単純だが非常に重要なルール。

于 2012-12-28T05:43:21.893 に答える