在php中生成所有查询的类

时间:2014-07-21 05:58:56

标签: php mysql class oop

我正在创建一个自动生成MySQL查询的类,但我遇到了一些问题......

这是我的数据库类......

 <?php
    class Database {

    var $host="localhost";
    var $username="";    
    Var $password="";
    var $database="";
    var $fr_query;
    var $row= array() ;


public function connect() 
{
    $conn= mysql_connect($this->host,$this->username,$this->password);
    if(! $conn )
    {
    die('Could not connect: ' . mysql_error());
    }
}

public function db() 
{
    $conn_db = mysql_select_db($this->database);
    if(! $conn_db )
    {
        echo 'Could Not Connect the Database';
    }
}

public function run_query($sql)
{

 $run = mysql_query($sql);
    if(!$run)
    {
       throw new Exception("!!!!!Invalid query!!!!!!!"); 
    }

    $newId = mysql_insert_id();

    if($newId)
    {
        return $newId;
    }

    return true;
}


public function fetchRow($fr) 
{
        if($fr)
        {
            $run = mysql_query($fr);
            if($run)
            {
             return mysql_fetch_assoc($run);   
            }
        }
        return null;
}

function fetchAll($fr_query) 
{

        if($fr_query)
        {
        $run = mysql_query($fr_query); 
        if($run)
        {      
            $data=array();
            while($row=mysql_fetch_assoc($run))
            {
                $data[]=$row;
            }
            return $data;
        }
    }
    return null;   
    }
   }   
   $n = new Database();
   $n->connect();
   $n->db();
 ?>

这是我的test.php

 <?php
  include("database.php");
   class Model_Abstract
  {
   protected $_data  = array();
   protected $_tableName = null;
   protected $_primaryKey = null;

    public function getTableName()
    {                                                    
    return $this->_tableName;
    } 

    public function getPrimaryKey()
    {                                                    
    return $this->_primaryKey;
    }

     public function __set($key, $value = NULL)
     {
     $key = trim($key);
     if(!$key)
     {
        throw new Exception('"$key" should not be empty.');
     }

     $this->_data[$key] = $value;
      return $this;
    }

    public function __get($key)
    {
    $key = trim($key);
    if(!$key)
    {
        throw new Exception('"$key" should not be empty.');
    }

    if(array_key_exists($key, $this->_data))
    {
        return $this->_data[$key];    
    }

    return NULL;
  }

  public function insert()
  {
    print_r($this->_data); 


    $keyString = "`".implode("`,`", array_keys($this->_data))."`";
    $valueString = "'".implode("','", array_keys($this->_data))."'";

    echo $query  = "INSERT INTO `{$this->getTableName()}` ({$keyString}) VALUES ({$valueString})";
    $this->adpater()->run_query($query);

    echo 'Inserted';

}

public function setData($data)
{
    if(!is_array($data))
    {
        throw new Exception('"$data" should not be empty.');    
    }
    $this->_data = $data;
    return $this;
}



public function load($id, $key = null)
{    
    if(!is_int($id) && $id)
    {
        throw new Exception('"$id" should not be blank.');    
    }

    if($id)
    {
       echo $query = "SELECT * FROM `{$this->getTableName()}` WHERE `{$this->getPrimaryKey()}` = '{$id}'";
       $data[] = $this->adpater()->fetchRow($query); 


       $tabelName = $this->getTableName();

       foreach($data as &$_data)
       {
           print_r($_data);

           $object = new $tabelName();
           $object->setData($_data);
           $_data = $object;
       }
       print_r($data);
       return $this;
                    /*
       $query = "SELECT * FROM `{$this->getTableName()}` WHERE `{$this->getPrimaryKey()}` = '{$id}'";
       $this->_data = $this->adpater()->fetchRow($query); 
       return $this;  */
    }
}


public function loadAll()
{    

       $query = "SELECT * FROM `{$this->getTableName()}`";
       $data[] = $this->adpater()->fetchAll($query); 
       return $data;
    }

public function delete($id, $key = null)
{    
    if(!is_int($id) && $id)
    {
        throw new Exception('"$id" should not be blank.');    
    }

    if($id)
    {
       echo $query = "DELETE FROM `{$this->getTableName()}` WHERE `{$this->getPrimaryKey()}` = '{$id}'";
       $data[] = $this->adpater()->run_query($query); 


       $tabelName = $this->getTableName();

       $msg = 'Deleted Successfully....';
       return $msg;

    }
}

 public function update()
{
    print_r($this->_data); 


    $keyString = "`".implode("`,`", array_keys($this->_data))."`";
    $valueString = "'".implode("','", array_keys($this->_data))."'";

    echo $query  = "UPDATE`{$this->getTableName()}` SET ({$keyString}) = ({$valueString}) WHERE `{$this->getPrimaryKey()}` = '{$id}'";
    $this->adpater()->run_query($query);

    echo 'Updated';

}


   public function adpater()
   {
    return new Database();                      
   }
}

class Product extends Model_Abstract
{
  protected $_tableName = 'product';
  protected $_primaryKey = 'product_id';

}

$product = new Product();

 echo $product->name; 



 $product->insert();

 print_r($product);


$product = new Product();
$product->name = 'Nokia Lumia';
$product->description = 'Windows';
$product->price = '15000';
$product->quantity = '12';
$product->sku = 'x2';
$product->status = '2';
$product->created_date = '0000-00-00 00:00:00';
$product->updated_date = ' ';
?>

所以在这里我的问题是在插入查询中,值与column_name相同... 我在loadAll()中遇到问题; 浏览器说“可捕获的致命错误:类产品的对象无法转换为字符串”

1 个答案:

答案 0 :(得分:1)

$keyString = "`".implode("`,`", array_keys($this->_data))."`";
$valueString = "'".implode("','", array_keys($this->_data))."'";

相同的行,相同的值。也许你的意思是

$keyString = "`".implode("`,`", array_keys($this->_data))."`";
$valueString = "'".implode("','", $this->_data) ."'";

哪个会使用$keyString的数组键和$valueString的数组值。


折旧警告

mysql_*是不推荐使用的功能。使用mysqli_*PDO


警告

此课程保护您免受SQL injections