PHPでデータベース操作(PDO)

創造工学演習で、PHPからデータベースを扱いたい人向けのサンプルコード。

データベースのテーブルを作る

データベースの初期化。 最近のクラウドシステムであれば、開発環境にSQLを実行させるGUIが 含まれる場合もあるけど、ひとまず単純な方法で...

<?php
  $dbfile = "/home/foo/data/data.db3" ;
?>
<html>
<head></head>
<body>

<?php
  // データベースの初期化のためにファイルを消す
  if ( file_exists( $dbfile ) ) {
    unlink( $dbfile ) ;
  }
  try {
    // PDOを使ったデータベースへの接続
    $db = new PDO( "sqlite:$dbfile" ) ;
    // SQL命令の配列
    $cmds = array(
         // create-table
         "create table GPS_TABLE ("
         ." name text ,"
         ." lon  real ,"
         ." lat  real "
         .") ;" ,
         // データ1つめ
         "insert into GPS_TABLE"
         ." ( name , lon , lat )"
         ." values( 't-saitoh' , 136.221926 , 35.891451 ) ;" ,
         // データ2つめ
         "insert into GPS_TABLE"
         ." ( name , lon , lat )"
         ." values( 'fnct' , 136.170816 , 35.936876 ) ;"
         ) ;
    // 1つづつSQLを実行
    foreach( $cmds as $cmd ) {
      $db->exec( $cmd ) ;
    }

  } catch( PDOException $e ) {
    // データベース接続に失敗
    print "Connection failed:\n" ;
  }
?>

</body>
</html>

データベースの内容を表示

<?php
  $dbfile = "/home/foo/data/data.db3" ;
?>
<html>
<head></head>
<body>

<?php
  // sqlite_open() とかは古いPHPの関数で、最近のPHPでは
  // 使えないみたいなので、PDO(PHP Database Object)を
  // 使うプログラムで書く必要があった。
  // sqlite_open -> new PDO( "sqlite:ファイル名" ) ;
  // その他の処理は、以下のサンプルコードを真似てください。


  // 接続相手のIPアドレスを表示
  //  現在、ssh でのサーバ接続は学校からのアクセスのみ許可。
  //  もし自宅で ssh 接続したいのなら、この値を私に教えてくれ。
  print $_SERVER[ "REMOTE_ADDR" ] ;
?>

<form method="get" action="display-table.php">
  name<input type="text" name="name" />
  <input type="submit" value="search" />
</form>

<?php
  // 入力フォームで入力された検索名
  //  厳密なPHPでは、未代入時に警告が表示されるので、
  //  isset() で、値がセットされているか確認して読み出す。
  $name = isset( $_GET[ "name" ] ) ? $_GET[ "name" ] : "" ;
  try {
    // PDOでデータベースに接続
    $db = new PDO( "sqlite:$dbfile" ) ;

    // まずはデータベースを全件表示するSQL
    $query = "select * from GPS_TABLE ;" ;

    print "<table border='1'>\n" ;
    foreach( $db->query( $query ) as $row ) {
       print "<tr><td>"
         .$row['name']."</td><td>"
         .$row['lat']."</td><td>"
         .$row['lon']."</td>"
         ."</tr>\n" ;
    }
    print "</table>\n" ;

    print "name='$name'" ;
    if ( $name != "" ) {
      // SQLインジェクション対策
      // executeで指定した値を ":name" に埋め込む
      $query = "select * from GPS_TABLE where name = :name ; " ;
      $st = $db->prepare( $query ) ;

      $st->execute( array( ':name' => $name ) ) ;
      print "
    print "</table>\n" ;

    // 入力フォームで指定したデータだけを取り出す例。
    print "name='$name'" ;
    if ( $name != "" ) {

      // SQLインジェクション対策
      // executeで指定した値を ":name" に埋め込む
      // $db->prepare()で処理の準備。
      $query = "select * from GPS_TABLE where name = :name ; " ;
      $st = $db->prepare( $query ) ;

      // SQLの ":name" の部分に、$name を埋め込んで検索
      $st->execute( array( ':name' => $name ) ) ;

      print "<table border='1'>\n" ;
      // 取り出し関数が違うのを注意、$st->fetchAll()
      foreach( $st->fetchAll() as $row ) {
        print "<tr><td>"
          .$row['name']."</td><td>"
          .$row['lat']."</td><td>"
          .$row['lon']."</td>"
          ."</tr>\n" ;
      }
      print "</table>\n" ;
    }

  } catch( PDOException $e ) {
    // データベースのエラーがあったらこの処理が動く。
    print "Connection failed:\n" ;
  }
?>

</body>
</html>
 

2017年7月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

アーカイブ

Google

このブログ記事について

このページは、T-Saitohが2017年7月12日 10:21に書いたブログ記事です。

ひとつ前のブログ記事は「リスト処理の課題」です。

次のブログ記事は「IT研向けlinux講習会」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。