Yii2中使用CreateCommand绑定参数执行INSERT查询报错求助
Yii2 INSERT查询正确绑定参数的方法
问题场景
运行以下代码时出现参数绑定错误:
$params = [':idCollection' => $idCollection, ':idBlock' => $idBlock]; //dd($params); Yii::$app->db->createCommand()->insert('collectionxblock', [ 'id_collection' => ':idCollection', 'id_block' => ':idBlock', ])->bindValues($params)->execute();
报错信息:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables
does not match number of tokens The SQL being executed was: INSERT
INTOcollectionxblock(id_collection,id_block) VALUES (0, 0)
问题:如何在Yii2的INSERT查询中正确绑定参数?
错误原因及解决方法
错误根源在于误用了insert()方法的参数传递方式:insert()的第二个参数是要插入的键值对,Yii2会自动处理参数绑定,不需要手动写占位符字符串。
方法一:直接使用insert方法自动绑定
这是Yii2推荐的简洁写法,直接传入变量即可,框架会自动生成安全的带占位符SQL:
Yii::$app->db->createCommand()->insert('collectionxblock', [ 'id_collection' => $idCollection, 'id_block' => $idBlock, ])->execute();
方法二:手动构造SQL并绑定参数
如果需要自定义完整SQL语句,可以用setSql()配合bindValues():
$params = [':idCollection' => $idCollection, ':idBlock' => $idBlock]; Yii::$app->db->createCommand() ->setSql('INSERT INTO collectionxblock (id_collection, id_block) VALUES (:idCollection, :idBlock)') ->bindValues($params) ->execute();
内容的提问来源于stack exchange,提问作者law_81
相关产品推荐
相关产品推荐

