この問題は、データソース名(DSN)(PDO接続文字列の最初の引数)の2つの構文エラーが原因で発生します。
エラー
- db定数を。として接続文字列に渡すことはできません
"...dbname = db"
。db
は二重引用符で囲まれているため、定数ではなく文字列として解釈されます。
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