2012-04-11 12 views
0

Weiß jemand, ob es einen Fehler in CRUD in Löschoperationen gibt. DB Adapter:Zend_Db löscht keine Tabellenzeile

$this->_db = Zend_Registry::get("db"); 

ich tun, wie folgt:

$sql = "DELETE FROM premium_items WHERE id = '$id'"; 
        $stmt = new Zend_Db_Statement_Pdo($this->_db, $sql); 
        return $stmt->execute(); 

und

$sql = "DELETE FROM premium_items WHERE id = ?"; 
       $stmt = new Zend_Db_Statement_Pdo($this->_db, $sql); 
       return $stmt->execute(array($id)); 

und

$this->_db->delete('premium_items', "id = '$id'"); 

Jede Variante ohne Fehler funktioniert aber nicht tut, was es muss tun . Was kann ich in einer solchen Situation tun?

Antwort

1

Mit einem Zend_Db_Adapter, versuchen:

$this->_db->delete('premium_items', array("id = ?" => $id)); 

oder, in diesem speziellen Fall können Sie tun:

$this->_db->delete('premium_items', 'id = ' . (int)$id); 

(aber nur diese eine tun, wenn Sie eine ganze Zahl verwenden und Sie werfen it)

+0

die Lösung gefunden, jeder war richtig, man muss nur immer prüfen, ob die Transaktion festgeschrieben wird :( –

1

In Ihrem Modell (Zend_Db_Table_Abstract):

$row = $this->find($id)->current(); 
$row->delete(); 

Oder

$db = $this->getAdapter(); 
$db->delete($table, $db->quoteInto("id = ?", $id)); 
+0

Ich habe tatsächlich diese bereits: 'public function __construct (Zend_Db_Table_Abstract $ DbTable, $ id) { \t $ this -> _ dbTable = $ dbTable; \t if ($ id) { \t \t $ this -> _ Zeile = $ this -> _ dbTable-> find ($ id) -> current(); \t} sonst { \t \t $ this -> _ row = $ this -> _ dbTable-> createRow(); \t} } ' dann ' public function delete() { \t return $ this -> _ row->() löschen; } ' –

+0

Ich hatte bereits dieses Problem, ohne eine Lösung mit zend_db_table Funktion zu finden .. Ich löse dies mit meinem letzten Code – TeChn4K