IT系おじさんのチラシの裏
2018年10月~
当サイトの記事にはアフィリエイト広告のリンクが含まれる場合があります

PHPのPDOでMariaDB(MySQL)への接続テスト

MariaDB※1への接続テスト自体はHeidiSQLで十分ですが、PHPでPDOを使えるようにしておいたほうが良いよね、ってことで。

この記事で使っているソフトのバージョン情報

  • Windows 10 Pro (Version 1803)
  • nginx 1.14.0
  • PHP 7.2.11
  • MariaDB 10.3.10

php.iniを編集し、PDOを使えるようにする

c:\php\php.iniの extension=pdo_mysql の部分が#でコメントアウトされているため、これを外すだけでPDOが使えるようになります。

php.iniを編集してPDOを有効にする

PHPでPDO接続するスクリプトを書く

  1. c:\nginx\htmlがドキュメントルートのため、その下に pdo.php というテキストファイル(※)を用意
  2. UTF8 (BOMなし)で下記のようなPHPスクリプトを記述する

■PDOでMariaDBへ接続する例

<?php
//PDO設定
$pdo_dsn = 'mysql:host=localhost;dbname=test;charset=utf8;';
$pdo_user = 'root';
$pdo_pass = '********';
$pdo_option = array(
	PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
	PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
	PDO::ATTR_EMULATE_PREPARES => false,
	PDO::ATTR_STRINGIFY_FETCHES => false
);			
//データベース接続
try {
	$pdo = new PDO($pdo_dsn, $pdo_user, $pdo_pass, $pdo_option);
} catch (Exception $e) {
	header('Content-Type: text/plain; charset=UTF-8', true, 500);
	exit($e->getMessage());
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PDO接続テスト</title>
</head>
<body>
<?php
//SQL発行
$stmt = $pdo->query("SELECT @@version");
while ($row = $stmt->fetch()) {
	print_r($row);
}
?>
</body>
</html>

■補足説明

$pdo_dsn = 'mysql:host=localhost;dbname=test;charset=utf8;';

この部分はPDOの接続情報で、データベースはMySQLを使ってますよー、接続先はlocalhost、データベース名はtestで、文字コードはutf8を使いますよー、という意味。

$pdo_user/$pdo_passはデータベース接続に使うユーザー名とパスワード。

$pdo_optionについては下記のとおり。

  • PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION PDO関連でエラーが発生した際、例外が発生するようになる。try~catchでエラー処理するならこれ一択。
  • PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC レコード取得時($stmt->fetch())のデータは連想配列にするという意味。これがないと列名が使えない。
  • PDO::ATTR_EMULATE_PREPARES => false プリペアドステートメントのエミュレーションを行う(true)か行わない(false)かのオプション。ここは正直悩ましい。エミュレーションしたほうがパフォーマンスは高いけれど、細かい部分で挙動(型のキャストや複数SQLの実行等)が違ったりするので慣れないうちはエミュレーションなしのほうが良い、のかなぁ。
  • PDO::ATTR_STRINGIFY_FETCHES => false レコードを取得した際、数値を文字列化する(true)か、数値として扱う(false)か。でもこれ、上のエミュレーションfalseのときしか意味がなくて、エミュレーションした場合はどうやっても数値を文字列にしちゃうみたい。それはそういうものとわかっていれば何とでもなるけれど。

ブラウザで開いて確認する

PDOの動作テスト

SELECT @@version;の結果が表示されていればOK。

PHPエディターとしてはNotepad++がけっこうおすすめ

PHPってHTMLに埋め込むことを前提として発展してきた言語だと思うので、スクリプト全体をphpで囲ってhtml出力は全部echoで行う、というのはちょっと違うと思うのですよ。

もちろんテンプレート用のhtmlを外部に用意しといて、それをphpで読み込んで出力するとか、そういうのはまた別の話しとして。

ともあれ、htmlとphpが混在するテキストはそのままでは読みづらく、背景色で見分けられるのが大事だとぼくは考えるわけです。

そこで、長年Peggy Proという色分けエディターを愛用してきたのですが、2014年に開発が終了してしまいました…。

古い設計のテキストエディターだったため、内部がUnicode化されておらず、扱えない文字コードがけっこう増えてきて、早いとこUnicode対応してくれないかなぁーと思っていたらまさかの開発終了に涙目ですよ。

そこで別のエディターを探しはじめたのですが、Eclipseとかの統合環境でPHPの開発をする人が多いのか、あんまりPHPに特化したテキストエディターって見つからないんですよねえ。

関数やキーワードの色分け程度はできても、タグで囲った部分の背景色を変えて、しっかりくっくりとhtmlとphpの分かれ目を表現してくれるようなエディターを探していたわけです。

そしてようやく見つけたのが Notepad++

Notepad++

こんなふうにhtml部分とphp部分の背景色が違って見えるのでとてもイイ。

EUC-JPが扱えなかったり、ShiftJISオンリーのファイルを開くと文字化けすることがあったり、ちょっと日本語の扱いに不安なところもありますが、UTF-8を使う限り問題は起きていません。

PHP用のテキストエディターをお探しの方はぜひ一度お試しあれ。
https://notepad-plus-plus.org/

まとめ

  • PDOを使うにはphp.iniを編集し、pdo_mysqlを有効にする
  • PDOには大きな特徴としてプリペアドステートメントがある
  • プリペアドステートメント含め、PDOの接続オプションはよく吟味する
  • PHPスクリプトはUTF8のBOMなしで記述する
  • 色分けエディタなら Notepad++ がけっこうオススメ

なんかちょっといまいち綺麗にまとまりませんでしたし、PDOの記事なわりにテキストエディターの語りが一番熱かった気がしますが、プログラマーにエディターの話をさせると長くなるのは仕方がないってことでひとつ…(;´∀`)

関連記事

Windows版PHPでSFTP接続するにはphp_ssh2.dllが必要

Web運営のメンテナンス作業(ローカルへのバックアップ作業とか)を自動化する方法について4回にわけて記事にしてきました。 WSHでブラウザを自動操作する PHPでファイルとDB(Postgre

簡単にWindowsでPHPを使えるようにする手順

備忘録も兼ねてWeb運営のメンテナンス(バックアップ)を自動化する方法について3回に渡り記事にしてきました。 WSHでブラウザを自動操作する PHPでファイルとDB(PostgreSQ

コメント

新しいコメントを投稿する

[新規投稿]
 
TOP