首先让我说我主要是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."'";
非常感谢大家的快速,亲切的回复! :)
答案 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。“'”;
再次,非常感谢。祝你有美好的一天!