我正在使用 mysql 在 PHP 中编写登录脚本(是的,我知道它已被弃用),但是我在从数据库中检索信息时遇到了问题。我有另一个输入信息的脚本,效果很好,但是在检索时,它似乎不起作用。
当我说它不起作用时,我的意思是我用来从数据库中获取信息的检索函数似乎没有正确传递信息,或者我没有使用它正确传递的内容。无论哪种方式,问题是,它应该检索包含电子邮件、密码、名字和姓氏的 User 类型的对象。
下面是完成所有工作的 PHP 文件的简化版本,以及可能/可能不是问题的检索函数。当我运行它时,我得到的只是一个页面,上面写着“名字是”,仅此而已,而不是显示存储的名字。
至于故障排除:
- 我已经确认 get_firstname() 函数有效,但在以下情况下它不会返回任何内容。
- 我还确认我的其他 getter 函数也是如此。
- 我已经确认检索功能正在返回“某物”。我通过让它返回一个字符串而不是一个用户来进行测试,它按预期返回,并且 PHP 文件能够使用它。
- 我已经确认数据库确实已经存储了我要求的信息。
- 我已经运行了一个查询,直接在检索函数中询问完全相同的内容,并让它返回我想要的内容。
这是代码:
<?php
include_once '/home/Databases/User.php';
include_once '/home/Databases/dbUser.php';
include_once '/home/Databases/dbInfo.php';
connect();
$email = mysql_real_escape_string($_GET['email']);
$password = mysql_real_escape_string($_GET['password']);
$rememberme = mysql_real_escape_string($_GET['remember']);
// does this user exist?
$confirm = retrieve_dbUserByEmail($email);
$name = $confirm->get_firstname();
// if they do exist
if($confirm != false) {
echo "First name is ".$name;
}
// if user doesn't exist
else {
header('Location: index.php?login=nonexistant');
exit();
}
?>
这是 retrieve_dbUserByEmail 函数:
function retrieve_dbUserByEmail($email){
connect();
$email = mysql_real_escape_string($email);
$query = "SELECT * FROM dbUser WHERE email = '".$email."' LIMIT 1";
$result = mysql_query($query);
if ($result==null ) {
mysql_close();
return false;
}
$result_row = mysql_fetch_assoc($result);
$user = new User($result_row['id'], $result_row['email'], $result_row['password'], $result_row['firstname'],$result_row['lastname']);
mysql_close();
return $user;
}
要回答一些已经提出的问题,retrieve 函数不会返回 false,只转义字符串一次并不能消除错误,并且看到的“connect()”函数成功连接到 SQL 服务器(已验证)。另外,如果它有用(尽管我无法想象为什么),我将在下面摆出我的 User 对象类。
<?php
class User {
private $id; // Unique User ID
private $email; // User Email
private $password; // Password
private $firstname; // First Name
private $lastname; // Last Name
//Constructor Function
function __construct($id, $email, $password, $firstname, $lastname) {
$this->id = $id;
$this->email = $email;
$this->password = $password;
$this->firstname = $firstname;
$this->lastname = $lastname;
}
//Getter Functions
function get_id() {
return $this->id;
}
function get_email() {
return $this->email;
}
function get_password() {
return $this->password;
}
function get_firstname() {
return $this->firstname;
}
function get_lastname() {
return $this->lastname;
}
?>