トッカンソフトウェア

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>

			



ページのトップへ戻る