-2

PDO を使い始めたところです。接続のエラーについて説明してください。常に「接続中」と表示されます。

    <?php

       define('user','root');
       define('pass','');
       define('db','login_db');

       try
          {
       $dbh = new PDO("mysql:host = localhost; dbname = db",user,pass);
       echo "You are connected";
          }
       catch(PDOException $e)
          {
       echo $e -> getMessage(); 
          }
    ?>

また、知っている PDO のチュートリアルまたは電子ブックも提供してください。前もって感謝します。

4

2 に答える 2

1

この問題は、データソース名(DSN)(PDO接続文字列の最初の引数)の2つの構文エラーが原因で発生します。

エラー

  1. db定数を。として接続文字列に渡すことはできません"...dbname = db"dbは二重引用符で囲まれているため、定数ではなく文字列として解釈されます。
  2. DSNにスペースを含めることはできません。そのはず:

    "mysql:host=localhost;dbname=login_db" //no spaces.
    

私はこれをテストしました、そしてそれはいくつかの奇妙な振る舞いを示します:

  • host具体的には、と最初の=記号の間のスペースが問題を引き起こしているようです。"You are connected"スペースがある場合は、 「localhost」のつづりを間違えてもエコーします。
  • 同様に、dbnameとその=記号の間にスペースがある場合、指定されたデータベース名が正しくなくても接続しているように見えます。

私の推測では、これはPDOクラスがDSNを解析する方法のいくつかの癖です。

ソリューション

DSNからすべてのスペースを削除します。

また、別の方法でデータベース名を渡す必要があります。これを修正するにはさまざまな方法があります。奇妙なデバッグエラーが発生しないようにするために、定数定義の代わりに変数を使用することをお勧めします。

$host = 'localhost';
$user = 'root';
$pass = '';
$db   = 'login_db';

try{
    $dbh = new PDO("mysql:host=$host;dbname=$db",$user,$pass);
    echo "You are connected";
}
catch(PDOException $e){
    echo $e -> getMessage(); 
}

良いチュートリアルとして、あなたはこれらを見ることができます:

Net.tuts +:PHPデータベースアクセス

Net.tuts +:PDOを使用する理由

そしてもちろん、php.netのドキュメントを忘れないでください。

php.net:PDO

于 2012-11-14T08:45:58.933 に答える
0

定数識別子は大文字にする必要があります。

 define('USER','root');

定数を使用する場合は、次のようにします。

$dbh = new PDO("mysql:host = ". HOST .";dbname=" . DB ,USER,PASS);
于 2012-11-14T05:57:06.067 に答える