diff DBRecord.class.php @ 1:f5a9f0eb4858

deleted: LICENSE.ja
author Sushi-k <epgrec@park.mda.or.jp>
date Wed, 08 Jul 2009 11:44:50 +0900
parents
children d3ee3927eb3a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/DBRecord.class.php	Wed Jul 08 11:44:50 2009 +0900
@@ -0,0 +1,147 @@
+<?php
+include_once( 'config.php' );
+
+class DBRecord {
+	protected $table;
+	
+	protected $dbh;
+	public $id;
+	
+    function __construct( $table, $property = null, $value = null ) {
+		$this->table = $table;
+		
+		$this->dbh = @mysql_connect( DB_HOST, DB_USER, DB_PASS );
+		if( $this->dbh === FALSE ) throw new exception( "construct:データベースに接続できない" );
+		
+		$sqlstr = "use ".DB_NAME;
+		$res = $this->__query($sqlstr);
+		if( $res === false ) throw new exception("construct: " . $sqlstr );
+		$sqlstr = "set NAMES utf8";
+		$res = $this->__query($sqlstr);
+
+		if( ($property == null) || ($value == null) ) {
+			// レコードを特定する要素が指定されない場合はid=0として空のオブジェクトを作成する
+			$this->id = 0;
+		}
+		else {
+			$sqlstr = "SELECT * FROM ".$this->table.
+			            " WHERE ".mysql_real_escape_string( $property ).
+			              "='".mysql_real_escape_string( $value )."'";
+			
+			$res = $this->__query( $sqlstr );
+			$arr = mysql_fetch_array( $res , MYSQL_ASSOC );
+			if( $arr === FALSE ) throw new exception( "construct:無効な行" );
+			// 最初にヒットした行のidを使用する
+			$this->id = $arr['id'];
+		}
+		
+		return;
+	}
+	
+	function createTable( $tblstring ) {
+		$sqlstr = "use ".DB_NAME;
+		$res = $this->__query($sqlstr);
+		if( $res === false ) throw new exception("createTable: " . $sqlstr );
+		$sqlstr = "CREATE TABLE IF NOT EXISTS ".$this->table." (" .$tblstring.") DEFAULT CHARACTER SET 'utf8'";
+		$result = $this->__query( $sqlstr );
+		if( $result === false ) throw new exception( "createTable:テーブル作成失敗" );
+	}
+	
+	protected function __query( $sqlstr ) {
+		$res = @mysql_query( $sqlstr, $this->dbh );
+		if( $res === FALSE ) throw new exception( "__query:DBクエリ失敗:".$sqlstr );
+		return $res;
+	}
+	
+	function fetch_array( $property , $value, $options = null ) {
+		$retval = array();
+		
+		$sqlstr = "SELECT * FROM ".$this->table.
+		            " WHERE ".mysql_real_escape_string( $property ).
+		              " like '".mysql_real_escape_string( $value )."%'";
+		
+		if( $options != null ) {
+			$sqlstr .= " ".mysql_real_escape_string( $options );
+		}
+		$res = $this->__query( $sqlstr );
+		while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
+			array_push( $retval, $row );
+		}
+		
+		return $res;
+	}
+	
+	function __set( $property, $value ) {
+		if( $property == "id" ) throw new exception( "set:idの変更は不可" );
+		// id = 0なら空の新規レコード作成
+		if( $this->id == 0 ) {
+			$sqlstr = "INSERT INTO ".$this->table." VALUES ( )";
+			$res = $this->__query( $sqlstr );
+			$this->id = mysql_insert_id();
+		}
+		$sqlstr = "UPDATE ".$this->table." SET ".
+		             mysql_real_escape_string($property)."='".
+		             mysql_real_escape_string($value)."' WHERE id='".$this->id."'";
+		$res = $this->__query( $sqlstr );
+		if( $res == FALSE )  throw new exception("set:セット失敗" );
+	}
+	
+	function __get( $property ) {
+		if( $this->id == 0 ) throw new exception( "get:無効なid" );
+		if( $property == "id" ) return $this->id;
+		
+		$sqlstr = "SELECT ".mysql_real_escape_string($property)." FROM ".$this->table." WHERE id='".$this->id."'";
+		$res = $this->__query($sqlstr);
+		$arr = mysql_fetch_row( $res );
+		if( $arr === FALSE ) throw new exception( "get:".$property."は存在しない" );
+		
+		return stripslashes($arr[0]);
+	}
+	
+	function delete() {
+		if( $this->id == 0 ) throw new exception( "delete:無効なid" );
+		
+		$sqlstr = "DELETE FROM ".$this->table." WHERE id='".$this->id."'";
+		$this->__query( $sqlstr );
+		$this->id = 0;
+	}
+	
+	// countを実行する
+	static function countRecords( $table, $options = "" ) {
+		try{
+			$tbl = new self( $table );
+			$sqlstr = "SELECT COUNT(*) FROM " . $tbl->table ." " . $options;
+			$result = $tbl->__query( $sqlstr );
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+		if( $result === false ) throw new exception("COUNT失敗");
+		$retval = mysql_fetch_row( $result );
+		return $retval[0];
+	}
+	
+	// DBRecordオブジェクトを返すstaticなメソッド
+	static function createRecords( $table, $options = "" ) {
+		$retval = array();
+		$arr = array();
+		try{
+			$tbl = new self( $table );
+			$sqlstr = "SELECT * FROM ".$tbl->table." " .$options;
+			$result = $tbl->__query( $sqlstr );
+		}
+		catch( Exception $e ) {
+			throw $e;
+		}
+		if( $result === false ) throw new exception("レコードが存在しません");
+		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
+			array_push( $retval, new self( $table,  'id', $row['id'] ) );
+		}
+		return $retval;
+	}
+	
+	function __destruct() {
+		$this->id = 0;
+	}
+}
+?>