我正在为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对象做一个准备,这不是很方便,所以我想把__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()时出现问题。我做错了什么,但我无法弄清楚它是什么。
答案 0 :(得分: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);
序列很重要......