Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO类和Personal类,如何多次设置方法_Php_Sqlite_Pdo - Fatal编程技术网

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

Php PDO类和Personal类,如何多次设置方法,php,sqlite,pdo,Php,Sqlite,Pdo,我正在为PHPPDO编写一个类,以便缩短准备和执行方法的时间 而不是每次都要编写一个准备和绑定: $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_

我正在为PHPPDO编写一个类,以便缩短准备和执行方法的时间


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

$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_类型和animal_名称重复出现,因此我创建了一个类,将其删除:

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对象做一个准备,这不是很方便,所以我想将_构造更改为函数“set”:

这样说吧:

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

顺序很重要…

仅仅在一个表中添加一行两列听起来太麻烦了。@silkfire你是什么意思?我不明白,这是一个有两列的测试,但是可以扩展。正如我写的“我正在写一个类”,这是为了将来使用。为什么是-1?“而不是每次都要写一篇准备和绑定的文章”。这有什么不舒服的?只准备一次,然后执行多次。这可以通过事务加速。
$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);