2013-11-22 90 views
1

我在Yii框架查询,我要转换为查询生成器的代码mysql_fetch_assoc和查询生成器mysql_num_rows在警予

部分:

 $sql ="SELECT * FROM `mosqueculturalliablee` WHERE `email` ='$this->username'"; 
     $query = mysql_query($sql,$connect); 
     if ($query === FALSE) { 
      trigger_error(mysql_error()); 
     } 
     $numrows = mysql_num_rows($query); 
     if ($numrows!=0) 
     { 
      //while loop 
      while ($row = mysql_fetch_assoc($query)){ 
       $email = $row["email"]; 
       $password = $row["password"]; 
      } 

。我把这个前两行方法:

  $query =Yii::app()->db->createCommand() 
     ->select() 
     ->from('mosqueculturalliablee') 
     ->where("email='" . $this->username."'") 
       ->queryAll(); 

我的问题是mysql_num_rows($query)mysql_fetch_assoc($query)错误说$queryarray这是不允许的。

那么,我怎样才能将这些转换为查询生成器表达式?

回答

2

queryAll()返回查询结果的所有行。所以,你可以这样做:

$query =Yii::app()->db->createCommand() 
     ->select() 
     ->from('mosqueculturalliablee') 
     ->where("email='" . $this->username."'") 
       ->queryAll(); 
$totalRows = count($query); //get returned rows count 

和循环,这样做:

foreach($query as $row) { 
    ... 
} 
+0

完美。非常感谢。 – user3019375

+0

可能会有一段时间,如果您有太多记录可以使用。解决方案可能是使用2个查询,一个用于计数,另一个用于获取记录。 http://stackoverflow.com/questions/18675874/yii-queries-not-working/18679817#18679817 – topher

0

我不能评论这是由于较低的代表,但请不要建立这样的查询,因为它们容易受到SQL注入攻击。以下是正确的方法:

$results=Yii::app()->db->createCommand('SELECT * FROM mosqueculturalliablee WHERE `email`=:email') 
->queryAll(array(
    ':email'=>$this->username, 
)); 
+0

感谢您提供有用的提示,但发生错误: – user3019375

+0

但出现错误:CDbConnection及其行为没有方法或关闭命名为“createFindCommand”。 – user3019375

+0

对不起,我徒手打字。我只是改变了我应该做的事。 – DaSourcerer