<?php
// DSN(データソースネーム)
const DB_HOST = 'mysql:dbname = test_php; host = 127.0.0.1; charset = utf8';
const DB_USER = 'php_user';
const DB_PASSWORD = 'password';
try {
$pdo = new PDO(DB_HOST, DB_USER, DB_PASSWORD,[
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
echo "DBに接続されました";
} catch(PDOException $e){
echo "DBに接続されていません". "<br>". $e->getMessage();
exit();
}
$sql = 'select * from contacts where id = 2';
$stmt = $pdo->query($sql);
$result = $stmt->fetchAll();
var_dump($result);
実際に画面を表示してみると「DBに接続されました」と表示されているのに
最後のvar_dumpの出力結果では下記のエラーとなる。
Fatal error: Uncaught PDOException: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected in
・・・なんでだ??
イロイロ調べた結果、DSNが間違っているのではないかとのこと。
じっくりじっくり調べてもスペルミスではなさそう。。。うーーん
【結論】 やっぱりDSNの記述が間違っていた!!!
dbnameの前後にスペースを入れるとスペースも認識されてしまうため、スペースがあるとエラーになるらしい!
あとhostは「127.0.0.1」よりも「localhost」の方が好まれる?みたい。。。
以上、自分用備忘録
//NG(スペースあり)
const DB_HOST = 'mysql:dbname= test_php; host = 127.0.0.1; charset = utf8';
//OK(スペースなし)
const DB_HOST = 'mysql:dbname=test_php;host=localhost;charset=utf8';