1

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());
    }
}
4

1 に答える 1

1

私はそれがエスケープの問題であると仮定しています。

これを試して:

...
try {
    $sql = "DELETE FROM `calls` WHERE `id`= :id";
    $stmtx = $this->staging->prepare($sql);
    $stmtx->execute(array($this->call['info']['call_id']));
    if(!query) {
...
于 2012-06-21T10:30:53.563 に答える