PDO类和Personal类,如何多次设置一个方法


PDO Class and Personal Class, how to set a method more than once

我正在为PHP PDO编写一个class,以便缩短准备和执行方法。

而不是每次都要写一个准备和绑定:

$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改成一个函数"set":

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);

当我尝试对$myPDO执行新的set()时,问题就出现了。我做错了什么,但我搞不清是什么。

好的,已解决

$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);

顺序很重要。。。