2000年2月22日星期二

数据库操作

■MySQL 接続

MySQL の接続は、次のようにする。尚、エラー処理は、まったく行っていないので現実的な処理ではない。

<?php
/*
========================================================================
  MySQL 接続テスト phpsql1.php
========================================================================
*/
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>MySQL 接続テスト</TITLE>
</HEAD>
<BODY>
<P align="center">▼ MySQL 接続テスト ▼</P>
<HR>
<DIV>
<?php
// MySQL 接続
  if (!($cn = mysql_connect("localhost", "root", ""))) {
    die;
  }

// MySQL DB 選択
  if (!(mysql_select_db("sak"))) {
    die;
  }

// MySQL 問い合わせ
  $sql = "select * from test order by key1";
  if (!($rs = mysql_query($sql))) {
    die;
  }

// MySQL レコード参照
  while ($item = mysql_fetch_array($rs)) {
    print "${item['key1']} ";
    print "${item['data1']} ";
    print "${item['data2']} ";
    print "${item['data3']}<BR>";
  }

// MySQL 切断
  mysql_close($cn);

// 正常終了
  print "<P>正常終了</P>";
?>
</DIV>
<HR>
</BODY>
</HTML>

■PostgreSQL 接続

  ・PostgreSQL の接続は、次のようにする。
    尚、エラー処理は、まったく行っていないので現実的な処理ではない。
    また、動作テストは実施していない。

<?php
/*
========================================================================
  PostgreSQL 接続テスト phpsql2.php
========================================================================
*/
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>PostgreSQL 接続テスト</TITLE>
</HEAD>
<BODY>
<P align="center">▼ PostgreSQL 接続テスト ▼</P>
<HR>
<DIV>
<?php
// PostgreSQL 接続
  if (!($cn = pg_connect("host=sak-design port=5432 dbname=sak user=sak password=sak"))) {
    die;
  }

// PostgreSQL 問い合わせ
  $sql = "select * from test order by key1";
  if (!($rs = pg_exec($sql))) {
    die;
  }

// PostgreSQL レコード参照
  $ct = pg_numrows($rs);
  for ($i = 0; $i < $ct; $i++) {
    $item = pg_fetch_array($rs, $i);
    print "${item['key1']} ";
    print "${item['data1']} ";
    print "${item['data2']} ";
    print "${item['data3']}<BR>";
  }

// PostgreSQL 切断
  pg_close($cn);

// 正常終了
  print "<P>正常終了</P>";
?>
</DIV>
<HR>
</BODY>
</HTML>

■MySQL レコード追加、レコード修正、レコード削除

  ・MySQL のレコード追加、修正、削除は、次のようにする。
    尚、エラー処理は、まったく行っていないので現実的な処理ではない。

  ・変数項目中の「'」を「\'」に、「"」を「\"」にするには、
    $s = addslashes($s); のように addslashes を使用する。

  ・MySQL のバージョンによっては、トランザクションがサポートされていない。
    うちのバージョンでは、begin、commit でエラーにはならないものの
    rollback が使用できない。(^^;
    テーブルロックでは、マルチユーザアクセス時のレスポンスに問題がある
    ように思う。設計仕様でなんとかするしかないかも。

<?php
/*
========================================================================
  MySQL 追加、修正、削除テスト phpsql3.php
========================================================================
*/
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>MySQL 追加、修正、削除テスト</TITLE>
</HEAD>
<BODY>
<P align="center">▼ MySQL 追加、修正、削除テスト ▼</P>
<HR>
<DIV>
<?php
// MySQL 接続
  if (!($cn = mysql_connect("localhost", "root", ""))) {
    die;
  }

// MySQL DB 選択
  if (!(mysql_select_db("sak"))) {
    die;
  }

// MySQL トランザクション開始
  $sql = "begin";
  if (!(mysql_query($sql))) {
    die;
  }

// MySQL レコード削除
  $sql = "delete from test where key1 like 'z%'";
  if (!(mysql_query($sql))) {
    die;
  }
  print '初期削除件数= ' . mysql_affected_rows() . '<BR>';

// MySQL トランザクションコミット
  $sql = "commit";
  if (!(mysql_query($sql))) {
    die;
  }

// MySQL トランザクション開始
  $sql = "begin";
  if (!(mysql_query($sql))) {
    die;
  }

// MySQL レコード追加
  $sql = "insert into test values('z001', 10, 20, 30)";
  if (!(mysql_query($sql))) {
    die;
  }
  print '追加件数= ' . mysql_affected_rows() . '<BR>';
  $sql = "insert into test values('z002', 11, 22, 33)";
  if (!(mysql_query($sql))) {
    die;
  }
  print '追加件数= ' . mysql_affected_rows() . '<BR>';
  $sql = "insert into test values('z003', 111, 222, 333)";
  if (!(mysql_query($sql))) {
    die;
  }
  print '追加件数= ' . mysql_affected_rows() . '<BR>';

// MySQL レコード修正
  $sql = "update test set data2 = 222 where key1 = 'z001'";
  if (!(mysql_query($sql))) {
    die;
  }
  print '修正件数= ' . mysql_affected_rows() . '<BR>';

// MySQL レコード削除
  $sql = "delete from test where key1 = 'z003'";
  if (!(mysql_query($sql))) {
    die;
  }
  print '削除件数= ' . mysql_affected_rows() . '<BR>';

/*
// MySQL トランザクションロールバック
  $sql = "rollback";
  if (!(mysql_query($sql))) {
    die;
  }
*/

// MySQL トランザクションコミット
  $sql = "commit";
  if (!(mysql_query($sql))) {
    die;
  }

// MySQL 問い合わせ
  $sql = "select * from test order by key1";
  if (!($rs = mysql_query($sql))) {
    die;
  }
  print '照会件数= ' . mysql_num_rows($rs) . '<BR>';

// MySQL レコード参照
  while ($item = mysql_fetch_array($rs)) {
    print "${item['key1']} ";
    print "${item['data1']} ";
    print "${item['data2']} ";
    print "${item['data3']}<BR>";
  }

// MySQL 切断
  mysql_close($cn);

// 正常終了
  print "<P>正常終了</P>";
?>
</DIV>
<HR>
</BODY>
</HTML>

■PostgreSQL レコード追加、レコード修正、レコード削除

  ・PostgreSQL のレコード追加、修正、削除は、次のようにする。
    尚、エラー処理は、まったく行っていないので現実的な処理ではない。
    また、動作テストは実施していない。

  ・変数項目中の「'」を「\'」に、「"」を「\"」にするには、
    $s = addslashes($s); のように addslashes を使用する。

<?php
/*
========================================================================
  PostgreSQL 追加、修正、削除テスト phpsql4.php
========================================================================
*/
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>PostgreSQL 追加、修正、削除テスト</TITLE>
</HEAD>
<BODY>
<P align="center">▼ PostgreSQL 追加、修正、削除テスト ▼</P>
<HR>
<DIV>
<?php
// PostgreSQL 接続
  if (!($cn = pg_connect("host=sak-design port=5432 dbname=sak user=sak password=sak"))) {
    die;
  }

// PostgreSQL トランザクション開始
  $sql = "begin";
  if (!(rcd = pg_exec($sql))) {
    die;
  }

// PostgreSQL レコード削除
  $sql = "delete from test where key1 like 'z%'";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
  print '初期削除件数= ' . pg_cmdtuples($rcd) . '<BR>';

// PostgreSQL トランザクションコミット
  $sql = "commit";
  if (!(rcd = pg_exec($sql))) {
    die;
  }

// PostgreSQL トランザクション開始
  $sql = "begin";
  if (!(rcd = pg_exec($sql))) {
    die;
  }

// PostgreSQL レコード追加
  $sql = "insert into test values('z001', 10, 20, 30)";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
  print '追加件数= ' . pg_cmdtuples($rcd) . '<BR>';
  $sql = "insert into test values('z002', 11, 22, 33)";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
  print '追加件数= ' . pg_cmdtuples($rcd) . '<BR>';
  $sql = "insert into test values('z003', 111, 222, 333)";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
  print '追加件数= ' . pg_cmdtuples($rcd) . '<BR>';

// PostgreSQL レコード修正
  $sql = "update test set data2 = 222 where key1 = 'z001'";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
  print '修正件数= ' . pg_cmdtuples($rcd) . '<BR>';

// PostgreSQL レコード削除
  $sql = "delete from test where key1 = 'z003'";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
  print '削除件数= ' . pg_cmdtuples($rcd) . '<BR>';

/*
// PostgreSQL トランザクションロールバック
  $sql = "rollback";
  if (!(rcd = pg_exec($sql))) {
    die;
  }
*/

// PostgreSQL トランザクションコミット
  $sql = "commit";
  if (!(rcd = pg_exec($sql))) {
    die;
  }

// PostgreSQL 問い合わせ
  $sql = "select * from test order by key1";
  if (!($rs = pg_exec($sql))) {
    die;
  }
  print '照会件数= ' . pg_numrows($rs) . '<BR>';

// PostgreSQL レコード参照
  $ct = pg_numrows($rs);
  for ($i = 0; $i < $ct; $i++) {
    $item = pg_fetch_array($rs, $i);
    print "${item['key1']} ";
    print "${item['data1']} ";
    print "${item['data2']} ";
    print "${item['data3']}<BR>";
  }

// PostgreSQL 切断
  pg_close($cn);

// 正常終了
  print "<P>正常終了</P>";
?>
</DIV>
<HR>
</BODY>
</HTML>

■MySQL 問い合わせ、レコード参照

  ・MySQL の問い合わせ、レコード照会は、次のようにする。
    尚、エラー処理は、まったく行っていないので現実的な処理ではない。

  ・見出しを項目名から取得し、項目数も可変で照会表示するロジックになって
    いる。PHP3、PHP4 どちらでも動作する。

  ・PostgreSQL でも似たようにできると思う。疲れたので、PostgreSQL 版の
    問い合わせ、レコード参照はパス。(^◇^;)

  ・尚、単純なレコード参照方法は、MySQL、PostgreSQL 共に
    PHP + MySQL 編2 - RDBMS 接続、ログイン、mysql_connect、mysql_select_db
    に掲載してあります。

<?php
/*
========================================================================
  MySQL 問い合わせ、レコード参照テスト phpsql5.php
========================================================================
*/
?>
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<TITLE>MySQL 問い合わせ、レコード参照テスト</TITLE>
</HEAD>
<BODY>
<P align="center">▼ MySQL 問い合わせ、レコード参照テスト ▼</P>
<HR>
<DIV>
<?php
// MySQL 接続
  if (!($cn = mysql_connect("localhost", "root", ""))) {
    die;
  }

// MySQL DB 選択
  if (!(mysql_select_db("sak"))) {
    die;
  }

// MySQL 問い合わせ
  $sql = "select * from test order by key1";
  if (!($rs = mysql_query($sql))) {
    die;
  }
  print '照会件数= ' . mysql_num_rows($rs) . '<BR>';

// MySQL レコード参照開始
  $init = True;
  while ($item = mysql_fetch_array($rs)) {

  // MySQL 見出処理開始
    if ($init) {

    // MySQL レコード項目数参照
      $clct = count($item) >> 1;
      print "レコード項目数= $clct<BR>";

    // MySQL 項目名参照
      print '=================================<BR>';
      print '|';
      reset($item);
      for ($i = 0; $i < $clct; $i++) {
        $tmp = each($item);  // 添字キー読み飛ばしダミー
        $tmp = each($item);
        list($mds, $dmy) = $tmp;
        print " $mds |";
      }
      print '<BR>';
      print '=================================<BR>';

  // MySQL 見出処理終了
      $init = False;
    }

  // MySQL 項目データ参照
    print '|';
    for ($i = 0; $i < $clct; $i++) {
      print " $item[$i] |";
    }
    print '<BR>';

// MySQL レコード参照終了
    print '=================================<BR>';
  }

// MySQL 切断
  mysql_close($cn);

// 正常終了
  print "<P>正常終了</P>";
?>
</DIV>
<HR>
</BODY>
</HTML>

没有评论:

发表评论