【问题标题】:codeigniter issue with num_rows (possible bug?)num_rows 的 codeigniter 问题(可能的错误?)
【发布时间】:2013-06-10 03:45:10
【问题描述】:

我是 codeignitor 的新手,我在选择查询时遇到了重大问题。我最初以为我是新手(也许是),但事实上我花了 3 天时间研究指南和视频,我认为这是一个问题。

使用时:

if ( $q->num_rows > 0 )

我不断收到错误: 试图获取非对象的属性

我正在按照指南创建登录身份验证系统。我清楚地输入了讲师的内容,但我无法通过该错误,而且不仅本指南,我遵循的其他指南在尝试获取行数据时也导致了相同的错误。

这是我的模型:

public function verify_user($email, $password)
{
$q = $this
        ->db
        ->where('email_address', $email)
        ->where('password', sha1($password))
        ->limit(1)
        ->get('users');

   if ( $q->num_rows > 0 ) {
        return $q->row();
       }
       return false;
}

如果我能在这方面得到任何帮助,我们将不胜感激!

【问题讨论】:

    标签: php codeigniter


    【解决方案1】:

    改变

    $q->num_rows
    

    $q->num_rows()
    

    请看这里:codeigniter guide

    尝试做:

    echo $this->db->last_query(); //after $this->db ...... get('users');
    

    检查生成的 sql 以查看 sql 语句中是否存在任何错误

    【讨论】:

    • 已更改,现在出现此错误:致命错误:在第 18 行的 /home/techf/public_html/application/models/admin_model.php 中的非对象上调用成员函数 num_rows()
    • @bnelsonjax 尝试做 echo $this->db->last_query();在你的 get('users');检查生成的 sql 语句中是否有任何错误..
    • last_query 的绝妙想法。我添加了它并注释掉了 num_row 并且它显示正确: SELECT * FROM (users) WHERE email_address = 'me@aol.com' AND password = 'a36e1f2d2c1309e9f4c6d2ef75d01dd4fd21c' LIMIT 1 所以它抓住了正确的查询,那么为什么 num_rows 不起作用?
    • 好吧,我很愚蠢,我选择了错误的表,它是“用户”,应该是“管理员”。但这要归功于您对 last_query 的想法,因为我能够将其运行到 myphpadmin 中并且没有得到结果,这导致我发现它是错误的表。非常感谢!
    • @bnelsonjax 很高兴你明白了.. :)
    【解决方案2】:

    可能的原因

    它是一个函数,而不是一个属性。改成$qry->num_rows()

    您的查询不成功,返回FALSE

    先尝试var_dump你的结果。

    试试这个

    if( $qry != FALSE && $qry->num_rows() > 0 )
    

    //查询成功,至少有一行。

    【讨论】:

      【解决方案3】:

      num_rows后面需要加括号,因为num_rows是函数(方法),不是属性:

      $q->num_rows()

      另外,如果查询没有返回任何结果,那么$q 将不是一个对象,而是一个布尔值FALSE

      建议:

      public function verify_user($email, $password)
      {
          $user = $this
              ->db
              ->where('email_address', $email)
              ->where('password', sha1($password))
              ->limit(1)
              ->get('users')
              ->row();
      
          return (empty($user) ? false : $user);
      }
      

      【讨论】:

      • 函数可以单行:return $this->db->where('email_address', $email)->where('password', sha1($password))->limit(1)->get('users')->row();
      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 2018-03-25
      • 2011-10-05
      • 2012-12-02
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      相关资源
      最近更新 更多