我正在使用mysql(是的,我知道它已棄用)在PHP中使用登錄腳本,但是我遇到從我的數據庫中檢索信息的問題。我有另一個輸入信息的腳本,並且工作得非常好,但是當涉及到檢索時,它似乎不起作用。PHP/mysql未按預期檢索
當我說它不工作時,我的意思是我用來從數據庫中獲取信息的檢索函數似乎沒有正確傳遞信息,或者我沒有使用它的功能正確傳遞。無論哪種方式,問題是,它應該檢索一個包含電子郵件,密碼,名字和姓氏的User類型的對象。
下面是PHP文件的簡化版本,它可以完成所有的工作,以及可能/不可能是問題的檢索功能。當我運行這個時,我得到的只是一個頁面,上面寫着「名字是」,而不是顯示存儲的名字。
至於故障排除:
- 我已經證實,get_firstname()函數的工作原理,但它 不會在下面的情況下返回任何東西。
- 我也證實了我的其他getter函數也是如此。
- 我已確認檢索函數返回「某物」。 I 通過使其返回一個字符串而不是一個用戶進行測試,並且 按預期返回,並且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;
}
要回答這個問題已經被問了一些問題,檢索功能不返回假,逃避只有一次的字符串沒有擺脫錯誤,並且看到的「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;
}
?>
您正在轉義電子郵件字段兩次。你可能不想這樣做。應該在組裝SQL的地方進行轉義,而不是在清理輸入數據的地方進行轉義。 – staticsan
@staticsan感謝您的建議,我想知道這件事!所以你說我應該只有在CRUD函數中才有逃避,不一定在獲取數據時? –
*將用戶輸入密碼與存儲在數據庫中的密碼進行比較時,這是否正確? –