Php 调用成员函数row()错误|$row=$query->;行();|共点火器

Php 调用成员函数row()错误|$row=$query->;行();|共点火器,php,mysql,sql,codeigniter,email,Php,Mysql,Sql,Codeigniter,Email,首先让我说,我主要是一名iOS开发人员,最近才开始探索全堆栈开发的惊险冒险。我不熟悉PHP和MySQL。话虽如此,我有一个问题,我希望需要一个直截了当的解决办法 我正在为一个客户机创建新的api,该客户机有一个预先存在的数据库,他们希望使用电子邮件地址和密码对用户进行身份验证 我的代码: 客户: 我开始将电子邮件地址和密码从表单发布到PHP脚本。我已验证帖子是否如预期发生,即我收到了用户输入的电子邮件地址和密码。(对于我的问题,只有电子邮件是相关的。)我不想进入“加密你的密码”的讨论。这不是我的

首先让我说,我主要是一名iOS开发人员,最近才开始探索全堆栈开发的惊险冒险。我不熟悉PHP和MySQL。话虽如此,我有一个问题,我希望需要一个直截了当的解决办法

我正在为一个客户机创建新的api,该客户机有一个预先存在的数据库,他们希望使用电子邮件地址和密码对用户进行身份验证

我的代码:

客户: 我开始将电子邮件地址和密码从表单发布到PHP脚本。我已验证帖子是否如预期发生,即我收到了用户输入的电子邮件地址和密码。(对于我的问题,只有电子邮件是相关的。)我不想进入“加密你的密码”的讨论。这不是我的问题

服务器:(无论如何,它使用CodeIgniter框架)

用户模型中的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,直到它传递给AuthenticateServer,然后调用它$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)存储在用户表中数据库的电子邮件列中

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

我是否需要对电子邮件地址做一些额外的处理,以将其用作验证用户身份的方法?我这样做完全错了吗?任何帮助都将不胜感激

提前感谢你花时间考虑我的问题。 更新

我在被问到8小时后才能解决我自己的问题,但我想现在更新我的问题,让社区知道问题已经解决了。这解决了我的问题:

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

非常感谢大家快速、诚挚的回复!:)

更改模型中的sql语句:

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

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

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

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

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

错误接近$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;
    }

您可以使用活动记录。这种方法简单易懂,没有复杂的结构。

为什么不使用活动记录

$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;

非常感谢大家快速、诚挚的回复

似乎我对查询字符串的格式设置不正确

这解决了我的问题:

$sql=“从中选择电子邮件”$桌子“其中email=”“$email。””


再次表示感谢。祝你今天愉快

where条件应该是where email='“$email.”“;@Rikesh.No.我们可以直接使用row。由于时间限制,请检查我只是简单地修改了语法。但是,我将在下一次代码清理时尝试您的解决方案。谢谢,Kanishka!
$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;