2017-02-23 3 views
0

Ich versuche, eine Funktion zum Löschen eines Benutzerkontos mit einer Alles-oder-nichts-Transaktion einzurichten. Der Hauptteil der Funktion ist wie folgt:PHP PDO mehrere löschen Abfragen funktioniert nicht

$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; 
} 

Ich habe versucht, die Abfragen in separate vorbereitete Anweisungen setzen, aber so oder so ich this screen enden.

Ich benutze MAMP und versuche, mit einem MSSQL-Server zu interagieren. Ich benutze PHP 7.06 und mysqlnd ist aktiviert.

Liegt das daran, dass mehrere Abfragen gleichzeitig ausgeführt werden, oder würde das etwas mit meiner MAMP-MSSQL-Verbindung zu tun haben?

Antwort

-3

Dies sieht wie eine gute Möglichkeit aus, eine gespeicherte Prozedur zu verwenden. Es würde Ihren Code erheblich vereinfachen und das Debugging viel einfacher machen. Bonus: Die Transaktion ist wahrscheinlich auch schneller.