準備と実行のメソッドを短くできるように、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 オブジェクトごとに 1 つの準備しかできず、あまり便利ではないので、__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() を実行しようとすると、問題が発生します。私は何か間違ったことをしていますが、それが何であるかわかりません。