「phpプログラミング入門-データベースにアクセスする(PDO)を使用」の編集履歴(バックアップ)一覧はこちら
追加された行は緑色になります。
削除された行は赤色になります。
昨日の記事[[phpプログラミング入門-データベースにアクセスする(mysql_connect)を使用]]のやり方では、セキュリティに脆弱性があったり、データベースの種類によって少し使う関数が変わってきてしまうため現在は推奨されていません。~
~
そこで今日は現在推奨されているPDOを使ったやり方で昨日の記事と同じような事をやってみようと思います。~
*下準備
昨日と同じです。~
データベースにアクセス⇒データベースの情報を表示⇒データベースに新しい情報を追加~
という流れでチャレンジしてみます。~
*データベースにアクセス
**php
<?php
//データベースにアクセスして選択する
$user = '****';
$pass = '*****';
try {
$dbh = new PDO('mysql:host=localhost;dbname=for_practice', $user, $pass);
if($dbh){
echo "データベースへの接続に成功しました。";
}else{
echo "データベースへの接続に失敗しました。";
}
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
?>
**解説
まず、変数にphpMyAdminのユーザー名とパスを格納します。~
次にtryとcatchについて説明していきます。~
try節の中には例外発生の可能性のあるコードを記述し、catchは(例外クラス名 変数){例外発生時の処理}という具合に記述をします。~
もしも例外が発生しなかった場合はcatchの記述は無視されて次の処理に進んでいきます。~
die();はそこでphpの処理を終了するという関数です。~
つまり今回の場合もしもエラー!と表示されたら、そこで処理を終了させるという事になります。~
*データを表示する
**php
<?php
//データベースからデータを出力
$sql = 'select * from for_practice';
$stmt = $dbh->query($sql);
$stmt->execute();
while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
print($result['id'].'<br>');
print($result['name'].'<br>');
print($result['price'].'<br>');
}
?>
**解説
prepareメソッド(prepare()の部分)はqueryメソッドと似たような役割をはたしますが、SQL文の基本部分が同じで値だけ異なるような場合(例えば同じテーブルに値だけ変えて何回もデータを挿入するような場合)に効率よく行えます。~
ここに関してはある意味ではテンプレートのような記述なのかも知れません。~
fetch()は結果を取得して次の行をどのような形式で取得するか、といったような意味です。~
*データベースに情報を挿入する
**php
<?php
//データベースにデータを挿入
$sql = 'insert into for_practice (id, name, price) values (?, ?, ?)';
$stmt = $dbh->prepare($sql);
$flag = $stmt->execute(array(3, 'リンゴ', 100));
if ($flag){
print('INSERTクエリーに成功しました<br>');
}else{
print('INSERTクエリーに失敗しました<br>');
}
?>
この方法ではセキュリティに脆弱性があるため、使用を避けるべきみたいです。~
昨日の記事[[phpプログラミング入門-データベースにアクセスする(mysql_connect)を使用]]のやり方では、セキュリティに脆弱性があったり、データベースの種類によって少し使う関数が変わってきてしまうため現在は推奨されていません。~
~
そこで今日は現在推奨されているPDOを使ったやり方で昨日の記事と同じような事をやってみようと思います。~
*下準備
昨日と同じです。~
データベースにアクセス⇒データベースの情報を表示⇒データベースに新しい情報を追加~
という流れでチャレンジしてみます。~
*データベースにアクセス
**php
<?php
//データベースにアクセスして選択する
$user = '****';
$pass = '*****';
try {
$dbh = new PDO('mysql:host=localhost;dbname=for_practice', $user, $pass);
if($dbh){
echo "データベースへの接続に成功しました。";
}else{
echo "データベースへの接続に失敗しました。";
}
} catch (PDOException $e) {
print "エラー!: " . $e->getMessage() . "<br/>";
die();
}
?>
**解説
まず、変数にphpMyAdminのユーザー名とパスを格納します。~
次にtryとcatchについて説明していきます。~
try節の中には例外発生の可能性のあるコードを記述し、catchは(例外クラス名 変数){例外発生時の処理}という具合に記述をします。~
もしも例外が発生しなかった場合はcatchの記述は無視されて次の処理に進んでいきます。~
die();はそこでphpの処理を終了するという関数です。~
つまり今回の場合もしもエラー!と表示されたら、そこで処理を終了させるという事になります。~
*データを表示する
**php
<?php
//データベースからデータを出力
$sql = 'select * from for_practice';
$stmt = $dbh->query($sql);
$stmt->execute();
while($result = $stmt->fetch(PDO::FETCH_ASSOC)){
print($result['id'].'<br>');
print($result['name'].'<br>');
print($result['price'].'<br>');
}
?>
**解説
prepareメソッド(prepare()の部分)はqueryメソッドと似たような役割をはたしますが、SQL文の基本部分が同じで値だけ異なるような場合(例えば同じテーブルに値だけ変えて何回もデータを挿入するような場合)に効率よく行えます。~
ここに関してはある意味ではテンプレートのような記述なのかも知れません。~
fetch()は結果を取得して次の行をどのような形式で取得するか、といったような意味です。~