Php Yii框架中的未知错误

Php Yii框架中的未知错误,php,yii,Php,Yii,我的Yii音乐商店应用程序中有此代码,但我不知道错误。我的想法是显示/浏览专辑、艺术家和流派的类别/标准。但它总是显示“其他条件”。我已尝试修复它,但找不到错误。代码如下。希望有人能把它修好。谢谢大家 <?php class StoreController extends Controller { public $message; public function actionIndex() { $this->message = "Hello from Store.Inde

我的Yii音乐商店应用程序中有此代码,但我不知道错误。我的想法是显示/浏览专辑、艺术家和流派的类别/标准。但它总是显示“其他条件”。我已尝试修复它,但找不到错误。代码如下。希望有人能把它修好。谢谢大家

<?php

class StoreController extends Controller
{
public $message;

public function actionIndex()
{
    $this->message = "Hello from Store.Index()";
    $this->render('index', array('content'=>$this->message));
}

public function actionBrowse()
{
    if(isset($_GET["gid"])){
        $gid = $_GET["gid"];

        $genreCriteria = new CDbCriteria();
        $genreCriteria->select = "`GenreId`, `Name`, `Description`";
        $genreCriteria->condition = "genreId = " . $_GET["gid"];

        $artistCriteria = new CDbCriteria();
        $artistCriteria->alias = "t1";
        $artistCriteria->select = "DISTINCT `t1`.`Name`, `t1`.`ArtistId`";
        $artistCriteria->join = "LEFT JOIN `tbl_album` ON `tbl_album`.`ArtistId` = `t1` . `ArtistId`";
        $artistCriteria->order = "`t1`.`ArtistId` ASC";

        $albumCriteria = new CDbCriteria();
        $albumCriteria->alias = "t2";
        $albumCriteria->select = "`AlbumId`, `GenreId`, `Title`, `Price`, `AlbumArtUrl`";
        $albumCriteria->condition = "`GenreId` = " . $_GET["gid"];
        $albumCriteria->order = "`ArtistId` ASC";

        $this->render('index', array('Albums' => Album::model()->findAll($albumCriteria),
                                     'Artist' => Artist::model()->findAll($artistCriteria),
                                     'Genre' => Genre::model()->findAll($artistCriteria)));
    }else{
        $this->message = "Hello from Store.Browse()";
        $this->render('index', array('content'=>$this->message));
    }
}

public function actionDetails()
{
    $this->message = "Hello from Store.Details()";
    $this->render('index', array('content'=>$this->message));
}

// Uncomment the following methods and override them if needed
/*
public function filters()
{
    // return the filter configuration for this controller, e.g.:
    return array(
        'inlineFilterName',
        array(
            'class'=>'path.to.FilterClass',
            'propertyName'=>'propertyValue',
        ),
    );
}

public function actions()
{
    // return external action classes, e.g.:
    return array(
        'action1'=>'path.to.ActionClass',
        'action2'=>array(
            'class'=>'path.to.AnotherActionClass',
            'propertyName'=>'propertyValue',
        ),
    );
}
*/
}

我很确定答案很简单,您的页面URL缺少“gid”及其值。这是“如果设置”条件属于“其他”部分的唯一合理解释

你可以做一个快速的确认测试。进入您的浏览器,输入www.yoursitename.com/store/browse?gid=111,然后查看是否能得到您需要的结果。请记住,我不知道您的确切URL及其结构,因此这只是一个示例,但“/browse?gid=111”部分非常重要。它简单地为$u POST数组创建“gid”,并将其值设置为“111”

附加说明:与“isset”一起,您还可以检查“gid”值是否为空,有时这样做很有帮助,也很安全

此外,以下是我对您的Yii代码的版本:


如你所见,我只是删除了引号。这段代码没有在Yii中进行本地测试,但查询本身对我来说效果很好。

你的url是什么?那么,$\u实际填充了吗?我已经尝试过了,我的url是。我按照您所说的进行了更改,除了错误404之外,什么也没有发生-系统无法找到请求的操作“browse?gid=7”。对不起,我在Yii和PHPHey是个新手,快到了,试试看。您的URL是“id”而不是“gid”好的,谢谢,现在问题是:CDbCommand无法执行SQL语句:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在第1行的“tbl_a”中使用的“.”Name“,”t1“.”ArtistId”附近的正确语法。执行的SQL语句是:从
tbl\u-artist
t1
中选择不同的't1'。'Name','t1'。'ArtistId'从'tbl\u-album'中左键加入'tbl\u-artist'。按't1'排序。'ArtistId'ASC上述代码是否有误?这个问题实际上超出了当前主题的范围,但这里有解决方案。您对引号/倒逗号有疑问。我的MySQL查询变体是“选择不同的t1.Name,t1.ArtistId FROM tbl_artist t1 LEFT JOIN tbl_album.ArtistId ON tbl_album.ArtistId ORDER BY t1.ArtistId ASC”。我只是删除了你所有的引用。我用您的CDbCommand部分的我的版本编辑了我的原始答案,以保持此评论的简短。
$genreCriteria = new CDbCriteria();
    $genreCriteria->select = "GenreId, Name, Description";
    $genreCriteria->condition = "genreId = " . $_GET["gid"];

    $artistCriteria = new CDbCriteria();
    $artistCriteria->alias = "t1";
    $artistCriteria->select = "DISTINCT t1.Name, t1.ArtistId";
    $artistCriteria->join = "LEFT JOIN tbl_album ON tbl_album.ArtistId = t1.ArtistId";
    $artistCriteria->order = "t1.ArtistId ASC";

    $albumCriteria = new CDbCriteria();
    $albumCriteria->alias = "t2";
    $albumCriteria->select = "AlbumId, GenreI, Title, Price, AlbumArtUrl";
    $albumCriteria->condition = "GenreId = " . $_GET["gid"];
    $albumCriteria->order = "ArtistId ASC";