前の記事 ≪:PHP4Mono
次の記事 ≫:見ているページの更新日時をワンタッチで知る / デジタルARENA

データベースアクセスクラスをWEB上から自動生成

2005年10月31日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法
PHP Object Generator(POG)

データベースの構造(スキーマ)を定義するだけでSQL文とDAOクラスをWEB上で自動生成できる。
データベースと連携したアプリを作る際は便利そう。

PHP4,5用のどちらのコードを生成するかを選択できる。

実際に生成してみました(サンプル)
<?
//    POG 1.0 rev22 (http://www.phpobjectgenerator.com)
//    Feel free to use the code for personal & commercial purposes. (Offered under the BSD license)

//    This SQL query will create the table to store your object.
/*
    CREATE TABLE `test` (
    `testid` int(11) auto_increment,
    `a` VARCHAR(255),
    `b` VARCHAR(255),
    `c` VARCHAR(255),
    `d` VARCHAR(255),
    `e` VARCHAR(255), PRIMARY KEY  (`testid`));
*/
class test
{
    var 
$testId;
    var 
$a;
    var 
$b;
    var 
$c;
    var 
$d;
    var 
$e;
    
    
    function 
test($a=''$b=''$c=''$d=''$e='')
    {
        
$this->$a;
        
$this->$b;
        
$this->$c;
        
$this->$d;
        
$this->$e;
    }
    
    
    
/**
    * Gets object from database
    * @param integer $testId
    * @return object $test
    */
    
function Get($testId)
    {
        
$Database = new DatabaseConnection();
        
$query "select * from `test` where `testid`='".$testId."' LIMIT 1";
        
$Database->Query($query);
        
$this->testId $Database->Result(0,"testid");
        
$this->$Database->Unescape($Database->Result(0,"a"));
        
$this->$Database->Unescape($Database->Result(0,"b"));
        
$this->$Database->Unescape($Database->Result(0,"c"));
        
$this->$Database->Unescape($Database->Result(0,"d"));
        
$this->$Database->Unescape($Database->Result(0,"e"));
        return 
$this;
    }
    
    
    
/**
    * Returns a sorted array of objects that match given conditions
    * @param string $field
    * @param string $comparator
    * @param string $fieldValue
    * @param string $sortBy
    * @param boolean $ascending
    * @return array $testList
    */
    
function GettestList($field,$comparator,$fieldValue,$sortBy="",$ascending=true)
    {
        
        
$testList = Array();
        
$Database = new DatabaseConnection();
        
$query "select testid from test where `".$field."`".$comparator."'".$Database->Escape($fieldValue)."'";
        
$Database->Query($query);
        for (
$i=0$i $Database->Rows(); $i++)
        {
            
$test = new test();
            
$test->Get($Database->Result($i,"testid"));
            
$testList[] = $test;
        }
        switch(
strtolower($sortBy))
        {
            case 
strtolower("a"):
                
usort($testList, array("test","ComparetestBya"));
                if (!
$ascending)
                {
                    
$testList array_reverse($testList);
                }
            break;
            case 
strtolower("b"):
                
usort($testList, array("test","ComparetestByb"));
                if (!
$ascending)
                {
                    
$testList array_reverse($testList);
                }
            break;
            case 
strtolower("c"):
                
usort($testList, array("test","ComparetestByc"));
                if (!
$ascending)
                {
                    
$testList array_reverse($testList);
                }
            break;
            case 
strtolower("d"):
                
usort($testList, array("test","ComparetestByd"));
                if (!
$ascending)
                {
                    
$testList array_reverse($testList);
                }
            break;
            case 
strtolower("e"):
                
usort($testList, array("test","ComparetestBye"));
                if (!
$ascending)
                {
                    
$testList array_reverse($testList);
                }
            break;
            case 
"":
            default:
            break;
        }
        return 
$testList;
    }
    
    
    
/**
    * Saves the object to the database
    * @return nothing
    */
    
function Save()
    {
        
$Database = new DatabaseConnection();
        
$query "select * from `test` where `testid`='".$this->testId."' LIMIT 1";
        
$Database->Query($query);
        if (
$Database->Rows() > 0)
        {
            
$query "update `test` set
            `a`='"
.$Database->Escape($this->a)."',
            `b`='"
.$Database->Escape($this->b)."',
            `c`='"
.$Database->Escape($this->c)."',
            `d`='"
.$Database->Escape($this->d)."',
            `e`='"
.$Database->Escape($this->e)."' where `testid`='".$this->testId."'";
        }
        else
        {
            
$query "insert into `test` (`a`, `b`, `c`, `d`, `e` ) values (
            '"
.$Database->Escape($this->a)."',
            '"
.$Database->Escape($this->b)."',
            '"
.$Database->Escape($this->c)."',
            '"
.$Database->Escape($this->d)."',
            '"
.$Database->Escape($this->e)."' )";
        }
        
$Database->InsertOrUpdate($query);
        if (
$this->testId == "")
        {
            
$this->testId $Database->GetCurrentId();
        }
    }
    
    
    
/**
    * Clones the object and saves it to the database
    * @return nothing
    */
    
function SaveNew()
    {
        
$this->testId='';
        
$this->Save();
    }
    
    
    
/**
    * Deletes the object from the database
    * @return nothing
    */
    
function Delete()
    {
        
$Database = new DatabaseConnection();
        
$query "delete from `test` where `testid`='".$this->testId."'";
        
$Database->Query($query);
    }
    
    
    
/**
    * private function to sort an array of test by a
    * @return +1 if attribute1 > attribute2, 0 if attribute1==attribute2 and -1 if attribute1 < attribute2
    */
    
function ComparetestBya($test1$test2)
    {
        return 
strcmp(strtolower($test1->a), strtolower($test2->a));
    }
    
    
    
/**
    * private function to sort an array of test by b
    * @return +1 if attribute1 > attribute2, 0 if attribute1==attribute2 and -1 if attribute1 < attribute2
    */
    
function ComparetestByb($test1$test2)
    {
        return 
strcmp(strtolower($test1->b), strtolower($test2->b));
    }
    
    
    
/**
    * private function to sort an array of test by c
    * @return +1 if attribute1 > attribute2, 0 if attribute1==attribute2 and -1 if attribute1 < attribute2
    */
    
function ComparetestByc($test1$test2)
    {
        return 
strcmp(strtolower($test1->c), strtolower($test2->c));
    }
    
    
    
/**
    * private function to sort an array of test by d
    * @return +1 if attribute1 > attribute2, 0 if attribute1==attribute2 and -1 if attribute1 < attribute2
    */
    
function ComparetestByd($test1$test2)
    {
        return 
strcmp(strtolower($test1->d), strtolower($test2->d));
    }
    
    
    
/**
    * private function to sort an array of test by e
    * @return +1 if attribute1 > attribute2, 0 if attribute1==attribute2 and -1 if attribute1 < attribute2
    */
    
function ComparetestBye($test1$test2)
    {
        return 
strcmp(strtolower($test1->e), strtolower($test2->e));
    }
}
?>
powered by phpコード変換機.
スポンサード リンク

By.KJ : 2005年10月31日 12:20 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)