PHPでデータベースに接続してみる。
下準備としてこちらの記事を参照し、joytasというユーザー名でphpappsデータベースにアクセスできるようにしておくこと。

テーブル作成

1.phpmyadminにjoytasユーザーでログインする。
2.データベースphpappsに[persons]テーブルを作成する。

CREATE TABLE persons(
 id INT PRIMARY KEY AUTO_INCREMENT,
 name VARCHAR(30),
 age INT
 );

3.初期データを挿入しておく

INSERT INTO persons(name,age)VALUES
 ("John",30),("Paul",28),("George",27),("Ringo",26);

PHPからのDB接続

4.ドキュメントルート以下にlesson8フォルダを作成し、その中に以下のようなconnect.phpを作成する。

<?php
try{
  $db=new PDO('mysql:host=localhost;dbname=phpapps;charset=utf8','joytas','12345');
  echo 'OK';
  $db=null;
}catch(PDOException $e){
  die('エラーメッセージ:'.$e->getMessage());
}


5.ブラウザから実行しOKと出力されることを確認する。エラーが出る場合はlocalhostの部分を127.0.0.1に変更してみること。

一覧画面の作成

6.read.phpを以下のように作成する。

<?php
try{
  $db=new PDO('mysql:host=localhost;dbname=phpapps;charset=utf8','joytas','12345');
  $stt=$db->prepare('SELECT * FROM persons');
  $stt->execute();
}catch(PDOException $e){
  die('エラーメッセージ:'.$e->getMessage());
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHPLesson</title>
</head>
<body>
<a href="create.php">新規登録</a>
<table border="1">
<?php while($row=$stt->fetch()):?>
<tr>
<td><?=$row['id']?></td>
<td><?=$row['name']?></td>
<td><?=$row['age']?></td>
<td><a href="update?id=<?=$row['id']?>">更新</a>
<a href="delete?id=<?=$row['id']?>" onclick="return confirm('id=<?=$row['id']?>を削除してよろしいですか?');">削除</a></td>
</tr>
<?php endwhile;?>
</table>
</body>
</html>

7.ブラウザで実行してみよう。以下のようになれば成功だ。(現時点ではリンクを押すとエラー)

新規データ追加

8.create.phpを以下のように作成する。

<?php
if(count($_POST)>0){
  try{
    $db=new PDO('mysql:host=localhost;dbname=phpapps;charset=utf8','joytas','12345');
    $stt=$db->prepare('INSERT INTO persons(name,age) VALUES(?,?)');
    $stt->bindValue(1,$_POST['name']);
    $stt->bindValue(2,(int)$_POST['age'],PDO::PARAM_INT);
    $stt->execute();
    header('location:./read.php');
    exit;
  }catch(PDOException $e){
    die('エラーメッセージ:'.$e->getMessage());
  }
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PHPLesson</title>
</head>
<body>
<form method="post">
<p>名前:<input type="text" name="name"></p>
<p>年齢:<input type="number" name="age"></p>
<button type="submit">送信</button>
</form>
</body>
</html>

9.ブラウザからアクセスして、以下のように入力し送信ボタンを押す。

10.一覧が表示されデータが挿入されてれば成功だ。

データ更新

10.update.phpを以下のように作成する。

<?php
if(count($_POST)>0){
  try{
    $db=null;
    $db=new PDO('mysql:host=127.0.0.1;dbname=phpapps;charset=utf8','joytas','12345');
    $stt=$db->prepare('UPDATE persons SET name=? , age=? WHERE id=?');
    $stt->bindValue(1,$_POST['name']);
    $stt->bindValue(2,$_POST['age'],PDO::PARAM_INT);
    $stt->bindValue(3,$_POST['id'],PDO::PARAM_INT);
    $stt->execute();
    header('location:./read.php');
    exit;
  }catch(PDOException $e){
    die('エラーメッセージ:'.$e->getMessage());
  }

}else if(isset($_GET['id'])){
  try{
    $db=new PDO('mysql:host=localhost;dbname=phpapps;charset=utf8','joytas','12345');
    $stt=$db->prepare('SELECT * FROM persons WHERE id=?');
    $stt->bindValue(1,$_GET['id'],PDO::PARAM_INT);
    $stt->execute();
    $result=$stt->fetch(PDO::FETCH_ASSOC);
    if($result===false){
      $name='';
      $age='';
      $id='';
    }else{
      $name=$result['name'];
      $age=$result['age'];
      $id=$result['id'];
    }
  }catch(PDOException $e){
    die('エラーメッセージ:'.$e->getMessage());
  }
}else{
  header('Location:./read.php');
  exit;
}
function h($str){
    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
 ?>
 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8">
 <title>PHPLesson</title>
 </head>
 <body>
   <form method="post">
   <p>名前:<input type="text" name="name" value="<?=h($name)?>"></p>
   <p>年齢:<input type="number" name="age" value="<?=h($age)?>"></p>
   <input type="hidden" name="id" value="<?=h($id)?>">
   <button type="submit">送信</button>
   </form>
 </body>
 </html>


データの削除

<?php
if(isset($_GET['id'])){
  try{
    $db=new PDO('mysql:host=localhost;dbname=phpapps;charset=utf8','joytas','12345');
    $stt=$db->prepare('DELETE FROM persons WHERE id=?');
    $stt->bindValue(1,$_GET['id'],PDO::PARAM_INT);
    $stt->execute();
    $db=null;

  }catch(PDOException $e){
    die('エラーメッセージ:'.$e->getMessage());
  }
}
header('location:./read.php');