2013-07-07 60 views
-1

我正在爲PHP PDO編寫一個類,以便縮短準備和執行方法。PDO類和個人類,如何多次設置方法

不必編寫一個準備,結合每一次的:

$db = new PDO('sqlite:db.sdb'); 
$prep = $db->prepare("INSERT INTO animals (animal_type, animal_name) VALUES (:animal_type, :animal_name)"); 
$data_to_set = array(':animal_type' => 'Cow', ':animal_name' => 'Carolina'); 
$prep->execute($data_to_set); 

在這種情況下animal_type和animal_name得到重複,所以我創建這個削減了一個類:

class QuickPDO{ 

    public $fields, $values, $args; 

    public function __construct($args){ 

     foreach ($args as $key => $value) { 
      $this->fields .= substr($key, 1).', '; 
      $this->values .= $key.", "; 
     } 
     $this->values= substr($this->values, 0, -2); 
     $this->fields = substr($this->fields, 0, -2); 
     $this->args = $args; 

    } 

    public function insert($table){ 
     $returning_query = "INSERT INTO $table ($this->fields) VALUES ($this->values)"; 
     return $returning_query; 
    } 

} 

因此,這變得更容易,並變成:

$myPDO = new QuickPDO([':animal_type' => 'Cow', ':animal_name' => 'Carolina']); 
$prep = $db->prepare($myPDO->insert('animals')); 
$prep->execute($myPDO->args); 

到這裏,沒問題。不過這樣一來,我只能做一個對每個QuickPDO對象,這是不是很方便準備,所以我想改變__construct成功能「設置」:

public function set($args){ 

    foreach ($args as $key => $value) { 
     $this->fields .= substr($key, 1).', '; 
     $this->values .= $key.", "; 
    } 
    $this->values= substr($this->values, 0, -2); 
    $this->fields = substr($this->fields, 0, -2); 
    $this->args = $args; 

} 

,並調用它是這樣的:

$myPDO = new QuickPDO(); 
$myPDO->set([':animal_type' => 'Cow', ':animal_name' => 'Carolina']); 
$prep = $db->prepare($myPDO->insert('animals')); 
$prep->execute($myPDO->args); 

問題出現在我嘗試做一個新的set()到$ myPDO。我做錯了什麼,但我無法弄清楚它是什麼。

+0

聽起來太麻煩只是爲了添加一行2列的表。 – silkfire

+0

@silkfire你是什麼意思?我不明白,這是一個測試2列,但可以擴大。正如我寫的「我在寫課程」一樣,這是爲了將來的使用。爲什麼是-1? –

+0

「不必每次都編寫一個準備和綁定」。那有什麼麻煩的?你只准備一次,然後多次執行。這可以通過交易加快。 – silkfire

回答

0

好,解決了

$myPDO->set([':animal_type' => 'Like', ':animal_name' => 'This']); 
$prep = $db->prepare($myPDO->insert('animals')); 
$prep->execute($myPDO->args); 
$myPDO->set([':animal_type' => 'Works', ':animal_name' => 'Fine']); 
$prep->execute($myPDO->args); 

順序很重要...