参数化的DeleteAllByAttributes在YII中不起作用

Dzh*_*eyt 3 yii

我使用以下代码:

MyClass::model()->deleteAllByAttributes(array('phone_number'=>':phone_number'), '', array(':phone_number'=>$phoneNumber));
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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)
Run Code Online (Sandbox Code Playgroud)

Stu*_*Stu 14

我相信你不需要绑定attributes数组中的属性(如同findAllByAttributes()).params数组中的值绑定到condition字符串中的值,而不是attributes数组,因此我认为以下内容应该适合您(并进行清理):

MyClass::model()->deleteAllByAttributes(array(
    'phone_number'=>$phoneNumber,
));
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

MyClass::model()->deleteAllByAttributes(array(),'`phone_number` = :phone_number',array(
    ':phone_number'=>$phoneNumber,
));
Run Code Online (Sandbox Code Playgroud)

哪个会有同样的效果......但是你不妨使用deleteAll():

MyClass::model()->deleteAll('`phone_number` = :phone_number',array(
    ':phone_number'=>$phoneNumber,
));
Run Code Online (Sandbox Code Playgroud)

  • 是的,从我所看到的`$ attributes`数组中的值被放入`CDbCommandBuilder :: createColumnCriteria()`中的CDbCriteria`params`属性,该属性作为`deleteAllByAttributes()`的一部分运行,所以不需要sanatize (2认同)