这段代码工作得很好(所有数据库项目都按预期更新):
foreach($idMap as $menuId=>$pageId)
{
$sql = "UPDATE `menus_items` SET link = '/content/show?id=".$pageId."' WHERE id = ".$menuId."; ";
$affectedRows = Yii::app()->db->createCommand($sql)->execute();
echo $affectedRows." affected rows\n";
}
但它会0 affected rows
为每个执行的查询打印。为什么?
同样的效果是,当在一个 SQL 查询中执行许多行影响语句时:
$sql = '';
foreach($idMap as $menuId=>$pageId)
{
$sql .= "UPDATE `menus_items` SET link = '/content/show?id=".$pageId."' WHERE id = ".$menuId."; ";
}
$affectedRows = Yii::app()->db->createCommand($sql)->execute();
echo $affectedRows." affected rows\n";
我错过了什么?Docs 说,这CDbCommand::execute
应该返回受执行影响的行数。在迁移中使用此功能是否有效?