SQLの窓

2020年05月06日


PDO MySQL のバインドを使用した標準的な記述( ロリポップ )

PHP の ドキュメント上の サンプルを踏襲しています

接続

接続時は必ず  PDOException をスローします。なので、setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION) は実行されていません
<?php
session_cache_limiter('nocache');
session_start();

header( "Content-Type: text/html; charset=utf-8" );

/* ドライバ呼び出しを使用して MySQL データベースに接続する */
$dsn = 'mysql:host=mysql145.phy.lolipop.lan;dbname=LAA999999-mydb';
$user = 'LAA999999';
$password = 'password';

try {

	$dbh = new PDO($dsn, $user, $password);
	print "DB 接続に成功しました";

}
catch (PDOException $e) {

	echo '接続に失敗しました: ' . $e->getMessage();

}


// ***************************
// 解放( 接続解除 )
// ***************************
$dbh = null;


// ***************************
// デバッグ用
// ***************************
print "<pre>";
print_r($_GET);
print_r($_POST);
print_r($_SESSION);
print "</pre>";

?>


複数行の順次読込み

結果を簡単に確認する為に、text/plain で出力しています
<?php
session_cache_limiter('nocache');
session_start();

header( "Content-Type: text/plain; charset=utf-8" );

/* ドライバ呼び出しを使用して MySQL データベースに接続する */
$dsn = 'mysql:host=mysql145.phy.lolipop.lan;dbname=LAA999999-mydb';
$user = 'LAA999999';
$password = 'password';

try {

	// ***************************
	// 接続
	// ***************************
	$dbh = new PDO($dsn, $user, $password);
	// 接続以降で try 〜 catch を有効にする設定
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	print "DB 接続に成功しました\n";

}
catch (PDOException $e) {

	print '接続に失敗しました: ' . $e->getMessage();

}

// ***************************
// ループ読み出し
// ***************************
$sql = 'SELECT * from 社員マスタ where 氏名 like ?';
try {

	// まず準備する( prepare )
	$stmt = $dbh->prepare($sql);
	// SQL の変わる部分をバインドする
	// bindValue は、定数・変数どちらでも可
	$stmt->bindValue(1, "%田%", PDO::PARAM_STR);
	// 実行する
	$stmt->execute();

	// 読み出す( FETCH_BOTH : 両方 / FETCH_ORI_NEXT : 通常順次カーソル )
	while ($row = $stmt->fetch(PDO::FETCH_BOTH, PDO::FETCH_ORI_NEXT)) {
		$data = "{$row[0]}\t{$row[1]}\t{$row[2]}\n";
		print $data;
		print_r( $row );
	}

	// ***************************
	// ステートメントの解放
	// ***************************
	$stmt = null;
}
catch (Exception $e) {
	print "読み出しに失敗しました: {$e->getMessage()}";
}

// ***************************
// 解放( 接続解除 )
// ***************************
$dbh = null;


// ***************************
// デバッグ用
// ***************************
print_r($_GET);
print_r($_POST);
print_r($_SESSION);

?>


読込みながら更新

<?php
session_cache_limiter('nocache');
session_start();

header( "Content-Type: text/plain; charset=utf-8" );

/* ドライバ呼び出しを使用して MySQL データベースに接続する */
$dsn = 'mysql:host=mysql145.phy.lolipop.lan;dbname=LAA999999-mydb';
$user = 'LAA999999';
$password = 'password';

try {

	// ***************************
	// 接続
	// ***************************
	$dbh = new PDO($dsn, $user, $password);
	// 接続以降で try 〜 catch を有効にする設定
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	print "DB 接続に成功しました\n";

}
catch (PDOException $e) {

	print '接続に失敗しました: ' . $e->getMessage();

}

// ***************************
// ループ読み出し
// ***************************
$sql = 'SELECT * from 社員マスタ where 氏名 like ?';
$sql2 = 'update 社員マスタ set 生年月日 = 生年月日 + 1 where 社員コード = ?';
try {

	// まず準備する( prepare )
	$stmt = $dbh->prepare($sql);
	// SQL の変わる部分をバインドする
	// bindValue は、定数・変数どちらでも可
	$stmt->bindValue(1, "%田%", PDO::PARAM_STR);
	// 実行する
	$stmt->execute();

 	// 更新用の SQL を準備する
	$stmt2 = $dbh->prepare($sql2);

	// 読み出す( FETCH_BOTH : 両方 / FETCH_ORI_NEXT : 通常順次カーソル )
	while ($row = $stmt->fetch(PDO::FETCH_BOTH, PDO::FETCH_ORI_NEXT)) {
		$data = "{$row[0]}\t{$row[1]}\t{$row[2]}\n";
		print $data;
		print_r( $row );

		// 男性のみ更新
	 	if ( $row["性別"] == 0 ) {
			$stmt2->bindValue(1, $row["社員コード"], PDO::PARAM_STR);
			$stmt2->execute();
		}

	}

	// ***************************
	// ステートメントの解放
	// ***************************
	$stmt2 = null;
	$stmt = null;
}
catch (Exception $e) {
	print "読み出しに失敗しました: {$e->getMessage()}";
}

// ***************************
// 解放( 接続解除 )
// ***************************
$dbh = null;


// ***************************
// デバッグ用
// ***************************
print_r($_GET);
print_r($_POST);
print_r($_SESSION);

?>


このページの PDF


【PHP + データベースの最新記事】
posted by lightbox at 2020-05-06 19:54 | PHP + データベース | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり