PHP PostgreSQLと連携(PDO)
前回はPostgreSQL関数を使って、PostgreSQLと連携しましたが、PDOを使って、PostgreSQLと連携してみます。Windowsで動作確認を行いましたが、設定ファイルを修正する必要があります。
環境設定
php.ini
extension=php_pdo_pgsql.dllのコメントを外します。
;extension=php_pdo_pgsql.dll
extension=php_pdo_pgsql.dll
PostgreSQL
前回の環境をそのまま使います。SELECT
SELECTは $pdo->query で実行します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP Test</title>
</head>
<body>
<?php
$pdo = new PDO ( "pgsql:host=localhost;port=5432;dbname=postgres;user=postgres;password=ps" );
//カラム名を小文字にする
$pdo ->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER);
// SQL実行に失敗した場合、例外を発生させる
$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
// SELECTを実行
$stmt = $pdo->query ( "SELECT id, name FROM m_user" );
// SELECTの結果を取得
$rs = $stmt->fetchall ();
foreach ( $rs as $row ) {
echo "id:" . $row ["id"] . " name:" . $row [1] . "<br />\r\n";
}
?>
</body>
</html>
INSERT、UPDATE、DELETE
INSERT、UPDATE、DELETEは $pdo->exec で実行します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP Test</title>
</head>
<body>
<?php
$pdo = new PDO ( "pgsql:host=localhost;port=5432;dbname=postgres;user=postgres;password=ps" );
// カラム名を小文字にする
$pdo->setAttribute ( PDO::ATTR_CASE, PDO::CASE_LOWER );
// SQL実行に失敗した場合、例外を発生させる
$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//実行系SQL
$pdo->exec ( "INSERT INTO m_user(id ,name) VALUES('0099','INS')" );
$pdo->exec ( "UPDATE m_user SET name= 'UPD' WHERE id = '0099'" );
// SELECTを実行
$stmt = $pdo->query ( "SELECT id, name FROM m_user" );
// SELECTの結果を取得
$rs = $stmt->fetchall ();
foreach ( $rs as $row ) {
echo "id:" . $row ["id"] . " name:" . $row [1] . "<br />\r\n";
}
$pdo->exec ( "DELETE FROM m_user WHERE id = '0099'" );
?>
</body>
</html>
プリペアードステートメント
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP Test</title>
</head>
<body>
<?php
$pdo = new PDO ( "pgsql:host=localhost;port=5432;dbname=postgres;user=postgres;password=ps" );
// カラム名を小文字にする
$pdo->setAttribute ( PDO::ATTR_CASE, PDO::CASE_LOWER );
// SQL実行に失敗した場合、例外を発生させる
$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
// SQLの実行(プリペアードステートメント)
$stmt = $pdo -> prepare("INSERT INTO m_user(id ,name) VALUES(:id,:name)");
$id = '0999';
$name = "befor";
//bindValueはbind時に値が反映。テーブルには3が入る
$stmt->bindValue(':id', $id, PDO::PARAM_STR);
//bindParamはSQL実行前に値が反映。テーブルにはafterが入る
$stmt->bindParam(':name', $name, PDO::PARAM_STR);
$idx = '9999';
$name = "after";
$stmt->execute();
// SELECTを実行
$stmt = $pdo->query ( "SELECT id, name FROM m_user" );
// SELECTの結果を取得
$rs = $stmt->fetchall ();
foreach ( $rs as $row ) {
echo "id:" . $row ["id"] . " name:" . $row [1] . "<br />\r\n";
}
$pdo->exec ( "DELETE FROM m_user WHERE id = '0999'" );
?>
</body>
</html>
トランザクション
トランザクションを開始するには、$pdo->beginTransaction ()で、BEGINを実行するとトランザクションを開始し、$pdo->commit ()を実行するとコミットされ、 $pdo->rollback ()を実行するとロールバックされます。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP Test</title>
</head>
<body>
<?php
$pdo = new PDO ( "pgsql:host=localhost;port=5432;dbname=postgres;user=postgres;password=ps" );
// カラム名を小文字にする
$pdo->setAttribute ( PDO::ATTR_CASE, PDO::CASE_LOWER );
// SQL実行に失敗した場合、例外を発生させる
$pdo->setAttribute ( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
// トランザクション開始
$pdo->beginTransaction ();
// 実行系SQL
$pdo->exec ( "INSERT INTO m_user(id ,name) VALUES('0099','INS')" );
$pdo->exec ( "UPDATE m_user SET name= 'UPD' WHERE id = '0099'" );
// コミット
// $pdo->commit ();
// ロールバック
$pdo->rollback ();
// SELECTを実行
$stmt = $pdo->query ( "SELECT id, name FROM m_user" );
// SELECTの結果を取得
$rs = $stmt->fetchall ();
foreach ( $rs as $row ) {
echo "id:" . $row ["id"] . " name:" . $row [1] . "<br />\r\n";
}
?>
</body>
</html>
ページのトップへ戻る