ywork2020.com

Title

PDOオブジェクトでMySQLに接続する

目次 (INDEX)

PDOとは

ここで説明するPDO とは次の語句からなるPHPのクラスです。
PHP
読み: PHP
意味: Personal Home Page Tools / PHP:Hypertext Preprocessor
data
読み: データ
意味: 事実、資料
object
読み: オブジェクト
意味: 操作の対象となっているデータ

目次に戻る

このページの概要

このページではPHPのPDOオブジェクト使ってMySQLデータベースに接続する方法を紹介しています。

目次に戻る

サンプルコードと実行結果

ここではPDOオブジェクト使ってMySQLデータベースに接続する2つの方法をサンプルとして掲載しています。

  1. このページからMySQLに接続して結果を表示する場合。
  2. 他のページからPOSTされたクエリを使ってMySQLに接続する場合。

1.このページからMySQLに接続して結果を表示する

このサンプルコードはテーブル名を固定してレコード全件読み出しにしています。

サンプルコード: php
<?php
	error_reporting(0);		//エラー非表示。表示の場合は error_reporting(-1)
	$hostName = "設定";		//サーバー名
	$dbName = "設定";		//データベース名
	$charSet = "utf8";		//文字コード
	$userName = "設定";		//ユーザー名
	$passWord = "設定";		//パスワード
	$tableName = "設定";		//テーブル名
	$sql = "SELECT * FROM {$tableName}";	//クエリ
	$dataSourceName = "mysql:host={$hostName}; dbname={$dbName}; charset={$charSet}";//データソース
	
	try{
		$objPDO = new PDO($dataSourceName,$userName,$passWord,null);//$objPDO = PHP Data Objects

		if($objPDO == null){
			print '接続に失敗しました。<br>';
		}
		else{
			print "接続に成功しました。<br>";
		}

		$stmt = $objPDO -> query($sql);//$stmt = PDOStatement
		$columns = array();//カラム名取得
		for($i = 0; $i < $stmt->columnCount(); $i++) {
			$meta = $stmt->getColumnMeta($i);
			$columns[] = $meta['name'];
		}
		print("<table><tr>");//テーブル書き出し
		for($i=0;$i<count($columns);$i++){
			print("<th>{$columns[$i]}</th>");
		}
		while($result = $stmt -> fetch(PDO::FETCH_BOTH)){
			print("<tr>");
			for($i=0;$i<count($columns);$i++){
				print("<td>{$result[$columns[$i]]}</td>");
			}
			print("</tr>");
		}
		print("</table>");
	}
	catch(PDOException $e){
		//PDOエラー表示はコメントアウトしています。↓
		/*print("接続に失敗しました。<br>".$e->getMessage());*/
		die();
	}
	finally{
		$objPDO = null;//オブジェクト解放
	}
?>
実行結果:
接続に成功しました。
県番号都道府県県庁所在地地方
1北海道札幌市北海道
2青森県青森市東北
3岩手県盛岡市東北

目次に戻る

2.他のページからPOSTされたクエリを使ってMySQLに接続する

このサンプルコードはform要素からPOST送信されたクエリに対応しています。 実行結果については、サンプルのボタンをクリックするとボタンに書かれたSQLをこのページのURLに送信します。 ページは送信結果を出力するために再読み込みされますのでご了承ください。

サンプルコード: HTML
<body>
	<form action="受信ページのURL" method="POST">
		<input type="submit" name="sql" value="SELECT * FROM japan ORDER BY 県番号 LIMIT 0, 5;">
	</form>
</body>
サンプルコード: PHP
<?php
	error_reporting(0);		//エラー非表示。表示の場合は error_reporting(-1)
	$hostName = "設定";		//サーバー名
	$dbName = "設定";		//データベース名
	$charSet = "utf8";		//文字コード
	$userName = "設定";		//ユーザー名
	$passWord = "設定";		//パスワード
	$sql = "";					//クエリ
	$dataSourceName = "mysql:host={$hostName}; dbname={$dbName}; charset={$charSet}";
							
	$sql = $_POST['sql'];
	if(strlen($sql) > 0){
		try{
			$objPDO = new PDO($dataSourceName,$userName,$passWord,null);

			if($objPDO == null){
				print '接続に失敗しました。<br>';
			}
			else{
				print "接続に成功しました。<br>";
				print("sql > ".$sql."<br>");
			}

			$stmt = $objPDO -> query($sql);
			$columns = array();
			for($i = 0; $i < $stmt->columnCount(); $i++) {
				$meta = $stmt->getColumnMeta($i);
				$columns[] = $meta['name'];
			}
			print("<table><tr>");
			for($i=0;$i<count($columns);$i++){
				print("<th>{$columns[$i]}</th>");
			}
			while($result = $stmt -> fetch(PDO::FETCH_BOTH)){
				print("<tr>");
				for($i=0;$i<count($columns);$i++){
					print("<td>{$result[$columns[$i]]}</td>");
				}
				print("</tr>");
			}
			print("</table>");
		}
		catch(PDOException $e){
			//PDOエラー表示はコメントアウトしています。↓
			/*print("接続に失敗しました。<br>".$e->getMessage());*/
			print("接続に失敗しました。<br>");
			print("sql > ".$sql."<br>");
			die();
		}
		finally{
			$objPDO = null;
		}
	}
?>
実行結果:
ここでは下記のSQLが書かれたボタンをクリックすることでSQLがPOST送信されます。このPOSTデータを使ってMySQLにクエリを発行しますので ページの通常の読込みでは結果は表示されていません。

目次に戻る