PHPとデータベースの接続 [PHP]

php.iniにDSNを定義する

pdo.dsn.sqlserver=”mssql:host=localhost; dbname=db”
pdo.dsn.sybase=”sybase:host=localhost; dbname-db”
pdo.dsn.firebird=”firebird:User=foo;Password=baa;Database=DB.GDE;DataSource=localhost;Port=3050”
pdo.dsn.mysql=”mysql:host=localhost;dbname=db;charset=utf8”
pdo.dsn.oracle=”oci:db”
pdo.dsn.oracle=”oci:dbname=//localhost:1521/db”
pdo.dsn.odbc=”odbc:DSN=DB;UID=foo;PWD=baa”
pdo.dsn.postgresql=”pgsql:host=localhost port=5432 dbname=db user=foo password=baa”
pdo.dsn.sqlite3xonfile=”sqlite:/var/www/html/hoge/db.sqlite”
pdo.dsn.sqlite3xonemory=”sqlite::memory::”
pdo.dsn.sqlite2xonfile=”sqlite2:/var/www/html/hoge/db.sqlite”
pdo.dsn.sqlite2xonmemory=”sqlite2::memory::”

 

データベースに接続する

try {
$db = new PDO(‘sqlserver’,username,password);
//$db = new PDO(‘odbc’); //DSNにユーザー・パスワードを登録しているので不要
//$db = new PDO(‘sqlite’);  //SQLiteはユーザー・パスワードの概念がないので不要
} catch (PDOException $e) {
die (‘データベースに接続できませんでした:’.$e->getMessage());
}

 

SQLを発行する

exec()メソッド、またはquery()メソッドによる。

exec()メソッドは操作したレコード数を返す。

query()メソッドは結果セットを返す。

 

INSERT、UPDATE、DELETE、CREATE TABLE等はexec()メソッドを使う
try {
$db = new PDO(‘sqlite’);
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //データベース操作のエラーをPDOException例外とする
$db->exec(‘CREATE TABLE master(id INTEGER AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),email VARCHAR(100))’);
} catch (PDOExeption $e) {
die(‘テーブルを作成できませんでした:’.e->getMessage());
}

 

SELECT文はレコードセットを返してくるのでquery()メソッドを使う

PDO::query(string sql_statement)

 

ユーザー入力から動的にSQLクエリを生成する

quote()メソッドでエスケープする

string PDO::quote(string hoge [,int parameter_type])

 

プレイスホルダで置き換える

例1)

$db  = new PDO(‘sqlite’);
$object = $db->prepare(‘INSERT INTO master(name,email) VALUES(?,?)’);
$object->execute(array($_POST[‘name’],$_POST[‘email’]));

?の部分にパラメータが埋め込まれる。

 

例2)

?の代わりに:<name>形式で明示的に指定。

ついでにbindParamでパラメータと値を事前に対応付けてから実行。

$db  = new PDO(‘sqlite’);
$object = $db->prepare(‘INSERT INTO master(name,email) VALUES(:name,:email)’);
$object->bindParam(‘:name’,$_POST[‘name’],PDO::PARAM_STR,50);
$object->bindParam(‘:email’,$_POST[‘email’],PDO::PARAM_STR,100);
$object->execute();

 

SELECTした結果を順に処理する

$db = new PDO(‘sqlite’);
$rset = $db->query(‘SELECT * FROM master’);
while ( $row=$rset->fetch(PDO::FETCH_ASSOC)) {
print ($row[‘name’]);
print ($row[‘email’]);
}

※実際にはHTMLに組み込むと思うので<table>やら<td>やらで適当に括って使う。

 

トランザクション

トランザクションの開始

exec(‘BEGIN’)

コミット

exec(‘COMMIT’)

ロールバック

exec(‘ROLLBACK’)

書籍感想

ほしのあきサイバークローン

無料サンプル、ブログライター、ブログで口コミプロモーションならレビューブログ

フルみっく
伝染歌プレーヤー

急上昇キーワード

ゲーマータグ

Powered by Movable Type 4.25