PHP PDO 〜invalid data source name〜

イントロダクション

PHPでDBコネクションを取得するコードを書いているときの話です。

ちなみに、Javaの場合は下のように、DriverManager#getConnection()を使用します。

private static final String protocol = "jdbc:derby:";
private static final String DB_NAME = "MyDbTest";

public static void main(String[] args) {
    con = DriverManager.getConnection(protocol + DB_NAME + ";create=true", props);
    con.setAutoCommit(false);

    Statement s;
    ResultSet rs = null;

    s = con.createStatement();
    s.execute("create table location(num int, addr varchar(40))");
}

invalid data source name

表題のエラーが出てすごく困っていました。
下のようにコードを作成し最後のnew PDOの部分でエラーになるので「おかしい!」と悩んでいました。
参考サイトPHPマニュアル

$dns = 'mysql:host=localhost;dbname=testdb';
$username = 'user';
$password = 'pass';
$driver_options = [
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $username, $password, $driver_options);

サイトマップ

解決

スペルミスでした(笑)

$dns = 'mysql:host=localhost;dbname=testdb';
$pdo = new PDO($dsn, $username, $password, $driver_options);

わかりづらいのですが、「$dns」と「$dsn」で間違っていたのでコンストラクタにから文字が渡されていました。。。

解決方法

以下のようにtry〜catchでエラーを出力しました。

try {
    $dns = 'mysql:host=localhost;dbname=testdb';
    $username = 'user';
    $password = 'pass';
    $driver_options = [
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
    ];
    $pdo = new PDO($dsn, $username, $password, $driver_options);
} catch(Exception $e) {
    print($e->getTraceAsString());
}

これでエラーの詳細が出力されるので一発で解決できました。

エラー出力、ハンドリングはちゃんとやりましょう(笑)

WordPressのテスト環境

PHPを使用しているのならWordPressを使用している人も多いと思います。PHP + JSってのは結構あるパターンだと思っていますが、テスト環境を作った方が、影響なく、遠慮なくバグを出せるので、気楽にコードの修正ができます。
ここでおすすめなのが、MAMPです、MySQL内臓のサーバーです。早い話が、レンタルサーバーからバックアップ用のXMLをダウンロードして、WordPressをサーバーにセットしてやれば、レンタルサーバーの環境が作れます。
こんな感じです。
MAMP 起動設定 〜WordPressのテスト環境を作る〜

余談ですが

JavaFXで作成したアプリで、自分のサイト、ルートにあるページの機能(Angular + PHP)を説明して見ました。

MAMP(ローカルサーバー)セットアップ

XAMMP

Windowsで実装する場合はMAMPではなくXAMMPを使用しましょう。

でわでわ。。。

関連ページ(PHP)

  1. PHP PDO 〜MySQLにアクセスする〜
  2. PHP Ajax 〜DBに登録したデータを受信する〜
  3. Google Maps API PHP連携 〜マップ情報をDBに登録する〜
  4. PHP Image File 〜iPhoneやAndroidでの画像送受信の問題〜
  5. AngularJS Routing 〜PHPをWeb APIにする〜
  6. WordPress PHPカスタム〜根本的に見た目を変える〜
  7. WordPress PHPカスタム〜根本的に見た目を変える2〜
  8. Eclipse PHPプラグイン 〜ElipseでWordPress環境を構築〜
  9. WordPress テスト実装 〜heade-test.phpを表示〜
  10. AngularJS + PHP 〜WordPressと連携する〜
  11. AngularJS + PHP 〜AngularJSの実装〜
  12. AngularJS + PHP 〜AngularJSの実装2〜
  13. WordPress 処理解析 ~index.phpを眺める~

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す