调用成员函数row()错误| $ row = $ query-> row(); |笨

时间:2014-01-15 06:29:09

标签: php mysql sql codeigniter email

首先让我说我主要是iOS开发人员,他最近才开始探索全栈开发的惊心动魄的冒险经历。我是PHP和MySQL的新手。说我有一个问题,我希望需要一个直接的解决方案。

我正在为具有预先存在的数据库的客户端创建新api,他们希望使用电子邮件地址和密码来验证用户身份。

我的代码:

客户端: 我开始将表单中的电子邮件地址和密码发布到PHP脚本中。我已经确认帖子正在按预期发生,即我收到用户输入的电子邮件地址和密码。 (对于我的问题,只有电子邮件是相关的。)我不想进入“加密你的密码”讨论。那不是我的问题。

服务器:(对于它的价值,它使用CodeIgniter框架)

public function authenticateUser()
{
    $user = $_POST['user'];
    $password = $_POST['password'];

    $this->load->model('user_model');
    // for testing purposes, I'm just trying to echo the email address.
    echo $this->user_model->authenticateUser('user', $user, $password);
}

来自user_model的authenticateUser函数:

 public function authenticateUser($table, $email, $password)
    { 
        $sql = "SELECT email FROM " . $table . " WHERE email = " . "$email";
        $query = $this->db->query($sql);
        $row = $query->row();  // this is the line referenced in the error.

        return $row->email;
    }

为清楚起见,我调用参数$ user,直到它传递给authenticateUser然后我称之为$ email。显然这是无关紧要的。

以下是生成的错误:

Fatal error: Call to a member function row() on a non-object in /path/to/core/MY_Model.php on line 76



 76 || $row = $query->row();

电子邮件作为varchar(100)存储在用户表的数据库电子邮件列中。

如果我使用其他条件(例如userId)进行查询,我可以很好地访问电子邮件地址,但我无法使用电子邮件地址作为查询的搜索条件。 (对不起,如果我没有使用正确的命名法。)

我是否还有一些与电子邮件地址有关的内容,以便将其用作验证用户身份的方式?我错了吗?任何帮助将不胜感激。

提前感谢您抽出宝贵时间考虑我的问题。

更新

在被问到8小时后我无法解决自己的问题,但我现在想更新我的问题,以便社区知道它已经解决了。这解决了我的问题:

$sql = "SELECT email FROM " . $table . " WHERE email = '".$email."'";

非常感谢大家的快速,亲切的回复! :)

6 个答案:

答案 0 :(得分:0)

更改模型中的sql语句:

$sql = "SELECT email FROM " . $table . " WHERE email = '" . $email."'";

答案 1 :(得分:0)

将模型函数中的sql查询更改为:

$sql = "SELECT email FROM '".$table."" WHERE email = '".$email."'";

答案 2 :(得分:0)

试试这个,

$sql = "SELECT email FROM " . $table . " WHERE email = '$email' ";

而不是

$sql = "SELECT email FROM " . $table . " WHERE email = " . "$email";

答案 3 :(得分:0)

错误接近$ email.ie未正确编写。重写代码

 public function authenticateUser($table, $email, $password)
    { 
       $sql = "SELECT email FROM " . $table . " WHERE email = '".$email."'";
        $query = $this->db->query($sql);
        $row = $query->row();  // this is the line referenced in the error.

        return $row->email;
    }

您可以使用有效记录。该方法易于理解,没有复杂的结构。

答案 4 :(得分:0)

为什么不使用Active record

$this->db->select('email');
$this->db->from($table);
$this->db->where('email',$email);

$query = $this->db->get();

if ($query->num_rows() > 0)
{
    $result = $query->row();
    return $result->email;
}

return false;

答案 5 :(得分:0)

非常感谢大家的快速,亲切的回复。

我似乎在不正确地格式化我的查询字符串。

这解决了我的问题:

$ sql =“SELECT email FROM”。 $ table。 “WHERE email ='”。$ email。“'”;

再次,非常感谢。祝你有美好的一天!