PDOに挑戦することにしました。以下の関数は、テーブル内の行を別のデータベース (ステージングから本番) に移動してから、ステージングで行を削除する必要があります。2 つの完全に分離されたデータベースです。
行を取得して本番データベースに挿入することはできますが、ステージング データベースの行は削除されず、行の ID であるフィールド名 343 が正しくないというエラーが表示されます。理由はわかりません。それが実際の値であるフィールド名だと思います。
また、より良いベストプラクティスを教えてください。私は自分のコードがエレガントであるとは考えておらず、特に例外を除いて、これを行うためのより良い方法があると思います
private function moveCallToProduction() {
try {
$array = array(":id" => $this->call['info']['call_id']);
$sql = "SELECT * FROM `calls` WHERE `id`=:id";
$query = $this->staging->prepare($sql);
$query->execute($array);
$row = $query->fetch(PDO::FETCH_NUM);
try {
$sql = "INSERT INTO `calls` (`id`,`sip_id`,`extension`,`caller_id`,`stage`,`status`,`survey_id`,`start`,`answer`,`hangup`) VALUES (`?`,`?`,`?`,`?`,`?`,`?`,`?`,`?`,`?`,`?`)";
$stmt = $this->production->prepare($sql);
$stmt->execute($row);
if(!$stmt) {
throw new Exception('Unable to move the call '.$this->call['info']['call_id'].' to the production server.');
} else {
try {
$sql = "DELETE FROM `calls` WHERE `id`='".$this->call['info']['call_id']."'";
$query = $this->staging->query($sql);
if(!$query) {
throw new Exception('Unable to delete call '.$this->call['info']['call_id'].' from the staging server.');
}
}
catch(PDOException $e) {
$this->informer("FATAL",$e->getMessage());
}
}
}
catch(Exception $e) {
$this->informer("FATAL",$e->getMessage());
}
}
catch(PDOException $e) {
$this->informer("FATAL","We're unable to transport the call from the staging to production server. Error: ".$e->getMessage());
}
}