2013-01-10 51 views
3

工作我使用下面的代碼:參數DeleteAllByAttributes不中誼

MyClass::model()->deleteAllByAttributes(array('phone_number'=>':phone_number'), '', array(':phone_number'=>$phoneNumber)); 

而且我收到以下錯誤:

CDbException 
SQLSTATE[HY093]: Invalid parameter number: number of bound variables 
does not match number of tokens. The SQL statement executed was: 
DELETE FROM `my_class` WHERE `my_class`.`phone_number`=:yp0 
(E:\xampp\htdocs\yii\db\CDbCommand.php:354) 

回答

14

我相信你不需要綁定attributes數組中的屬性(也在findAllByAttributes()中)。在params數組中的值綁定到值在condition字符串,而不是attributes陣列,所以我認爲以下應爲你工作(並進行消毒):

MyClass::model()->deleteAllByAttributes(array(
    'phone_number'=>$phoneNumber, 
)); 

或者,你可以使用:

MyClass::model()->deleteAllByAttributes(array(),'`phone_number` = :phone_number',array(
    ':phone_number'=>$phoneNumber, 
)); 

這將有同樣的效果。但是,你還不如用deleteAll()

MyClass::model()->deleteAll('`phone_number` = :phone_number',array(
    ':phone_number'=>$phoneNumber, 
)); 
+0

所以沒有必要事先清理'$ phoneNumber'。 (除了可能的檢查,如果它是一個有效的電話號碼在這種情況下) –

+2

是的,從我可以看到'$ attributes'數組中的值被放入'CDbCommandBuilder :: createColumnCriteria()'中的CDbCriteria'params'屬性'它作爲'deleteAllByAttributes()'的一部分運行,所以不需要sanatize – Stu