2017-02-23 7 views
0

オール・オア・トランザクションを使用してユーザーのアカウントを削除する機能を設定しようとしています。次のように関数の主要部分は、次のとおりです。PHP PDOの複数の削除クエリが機能しない

$success = true; 
$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); 
$this->db->beginTransaction(); 

try 
{ 

    if($data = $this->get_ids($account_id)){ 
     $sql = "DELETE FROM table1 WHERE [ID] IN (:loc_ids); 
      DELETE FROM table2 WHERE [ID] IN (:spid); 
     "; 
     $success = $success && $this->db->prepare($sql)->execute(array(':loc_ids' => $data['loc_ids'], ':spid' => $data['spid'])); 
    } 

    $sql = "DELETE FROM table3 WHERE [ACCOUNT_ID] = :account_id; 
     DELETE FROM table4 WHERE ([ACCOUNT_ID] = :account_id OR [USER_ID] = :user_id); 
     DELETE FROM table5 WHERE [ACCOUNT_ID] = :account_id; 
     DELETE FROM table6 WHERE [ACCOUNT_ID] = :account_id; 
     DELETE FROM table7 WHERE [ACCOUNT_ID] = :account_id; 
    "; 
    $success = $success && $this->db->prepare($sql)->execute(array(':account_id' => $account_id, ':user_id' => $uid)); 

    if(!$success){ 
     throw new Exception("Error Processing Request", 1); 
    } 

    $this->db->commit(); 
    return true; 

} 
catch (PDOException $exc) 
{ 
    echo $exc->getMessage(); 
    $this->db->rollBack(); 
    return false; 
} 

私は別のプリペアドステートメントにクエリを入れて試してみたが、いずれかの方法は、私がthis screenで終わります。

私はMAMPを使用しており、MSSQLサーバーと対話しようとしています。 PHP 7.06を使用していて、mysqlndが有効になっています。

これは、複数のクエリを同時に実行しているか、MAMP-MSSQL接続と関係がありますか?

答えて

-3

これはストアドプロシージャを使用する良い機会のようです。それはあなたのコードを大幅に簡素化し、デバッグもずっと簡単にします。ボーナス:トランザクションもおそらく高速です。