ねっとぱんだ-プログラミング勉強ブログ-

Webデザイン、プログラミングの勉強ブログ。

【PHP】データベースとの接続

PHPでデータベースを使う

PDO
php data object PHP標準(5.1.0以降)のデータベース接続クラス。
MySQLPostgreSQLSQLiteなど、色々なデータベースに接続するための命令
どのデータベースを使う場合でも同じ関数を使える。

引用:http://www.php-labo.net/tutorial/class/pdo.html

まずデータベースを作って作業ユーザーを設定

create database practicedb;

grant all on practicedb.* to dbuser2@localhost identified by 'pass';

テーブル作成

use practicedb;

create table users(
id int not null auto_increment primary key,
name varchar(255),
score int
);

定数に必要な値を入れて行く。

<?php
define('DB_DATABASE','practice');
define('DB_USERNAME','dbuser2');
define('DB_PASSWORD','pass');
/**/
define('PDO_DSN','mysql:host=localhost;dbname='.DB_DATABASE);
define
定数 簡単な値のためのID(名前)
定数の値は スクリプト実行中に変更できない(マジック定数は例外)
ラベルと同じ規則に従います。有効な定数の名前は、 文字またはアンダースコアで始まり、任意の数の文字、数字、 アンダースコアが後に続く
DSN
Data Source Nameデータベースの接続情報に付けられる、識別用の名前
どの種類のデータベースか、ホスト名、データベース名を指定
引用
http://php.net/manual/ja/language.constants.php
http://wa3.i-3-i.info/word12383.html
http://php.net/manual/ja/ref.pdo-mysql.connection.php

参考を見てPDOを設定してindex.phpを表示しようとしたら何も表示されませんでした。
そこでエラーを表示させるコードを記述しました。

ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

「Uncaught Error: Undefined class constant 'ERRMODE_EXEPTION'」
と出たので単純な記述間違いだということがわかりました。

修正して以下でindex.phpを開きます。

<?php
ini_set( 'display_errors', 1 );
error_reporting( E_ALL );

define('DB_DATABASE','practicedb');
define('DB_USERNAME','dbuser2');
define('DB_PASSWORD','pass');
define('PDO_DSN','mysql:dbhost=localhost;dbname='.DB_DATABASE);

try{
$db = new PDO(PDO_DSN,DB_USERNAME,DB_PASSWORD);

//エラーが出た時にexceptionを出す
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//データを挿入
$db->exec("insert into users (name,score) values ('suzuki',30)");
echo 'user added';

//接続を切る
$db = null;

}catch(PDOException $e){

echo $e->getMessage();
exit;

}
?>

ターミナルで select * from users を実行すると無事データベースに指定した値が入力されていました。