【问题标题】:PDO Class and Personal Class, how to set a method more than oncePDO Class和Personal Class,如何设置一个方法不止一次
【发布时间】:2013-07-07 20:32:41
【问题描述】:

我正在为 PHP 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 Object做一个prepare,不是很方便,所以我想把__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() 时,问题就出现了。我做错了什么,但我不知道是什么。

【问题讨论】:

  • 在一张表中添加一行2列听起来太麻烦了。
  • @silkfire 你是什么意思?我不明白,这是一个有 2 列但可以扩展的测试。正如我写的“我正在写一门课”,这是为了将来使用。为什么是 -1?
  • “而不必每次都编写准备和绑定”。这有什么好烦的?您只准备一次,然后执行多次。这可以通过交易加速。

标签: php sqlite pdo


【解决方案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);

顺序很重要...

【讨论】:

    猜你喜欢
    • 2021-11-04
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2016-09-03
    • 2019-04-26
    • 2016-03-28
    相关资源
    最近更新 更多