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