Bir Önem düzeyi ihlali bir tablo sonuçlarından silme

1 Cevap php

Ben bir satır zend framework sağlanan sql bağdaştırıcısı kullanan bir veritabanı oluşturmak siler bir yöntem var.

class Table extends Zend_Db_Table_Abstract {

    ...

    $where = $this->getAdapter()->quoteInto(
        'ModID=? AND URL=?',
        array((int)$mid, $url->toString())
    );
    $this->delete($where);

Sorun, bu kod hata veriyor olmasıdır:

Zend_Db_Statement_Exception: SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)

Nerede yan tümcesi yalnızca bir sütun belirtir Benzer kod çalışıyor.

Birden çok sütun değerlerine dayalı satırları silmek için alternatif bir yöntem var mı?

1 Cevap

Sen Zend_Db_Select zaten yerleşik işlevselliğini kullanmak için böyle bir şey yapabilirsiniz:

$select = $this->select();
               ->where('modID = ?', (int)$mid);
               ->where('URL = ?', $url->toString());

$where = $select->getPart(Zend_Db_Select::WHERE);

$this->delete($where);

Bu çözüm ile ilgili dikkat edilmesi gereken bazı şeyler:

  • (Pro) Zend_Db_Select öncelemeyi zaten mevcut işlevselliği yararlanır
  • (Pro) o Zend_Db_Table yararlanır :: adaptör yöntemine vekiller silme, SQL-parçaları bir dizi sağlayabilir böylece. Belgeleri:

    "Tablosu) yöntemi (silme veritabanı adaptöre () yöntemi vekiller silmek yana, bağımsız değişkeni de SQL ifadeleri bir dizi olabilir. Ifadeler VE operatörünü kullanarak Boole terimler olarak birleştirilir."

  • (Con) bir Zend_Db_Select nesnesi oluşturur, ama nereye bendinde gerçekten sadece ilgilendi

Silme yöntemi Zend_Db_Select VEYA belki Zend_Db_Constraint (non-varolan sınıf) kabul olsaydı daha iyi olurdu. Bu silme kolaylaştıran, tüm tablolar için kullanılabilir böylece Elbette bu bir Utility-yöntem yapabilir.

Başka bir yöntem sadece seçme nesneyi atlamak için:

$where = "{$this->getAdapter()->quoteInto('modID = ?', (int)$mid)} AND 
          {$this->getAdapter()->quoteInto('URL = ?', $url->toString)}";