2014-11-25 115 views
0

我對這個問題非常困惑。我試圖從我的數據庫獲取信息,但它只是部分工作。我有一個名爲authenticate的函數,在擴展DatabaseObject的User類的user.php文件中。使用PHP OOP從數據庫檢索信息

class User extends DatabaseObject{ 

protected static $table_name = "sellatext_users"; 
public $id; 
public $email; 
public $password; 
public $fname; 
public $lname; 

public static function authenticate($email="", $password="") { 
    global $database; 
    $email = $database->escape_value($email); 
    $password = $database->escape_value($password); 

    $sql = "SELECT * FROM ".static::$table_name; 
    $sql .= " WHERE email = '{$email}' "; 
    $sql .= "AND password = '{$password}' "; 
    $sql .= "LIMIT 1"; 

    $result_array = static::find_by_sql($sql); 
    var_dump($result_array); 
    die; 
    return !empty($result_array) ? array_shift($result_array) : false; 
} 

這工作得很好,如果我的var_dump($ result_array)我得到

array(1) { 
     [0]=> object(User)#5 (5) 
       { 
       ["id"]=> string(1) "3" 
       ["email"]=> string(18) "email_address" 
       ["password"]=> string(8) "XXXXXXXX" 
       ["fname"]=> NULL 
       ["lname"]=> NULL 
       } 
     } 

EMAIL_ADDRESS和密碼,省略了安全性,但我想不通爲什麼我收到NULL兩個fname和lname。表中有信息(這是我的名字),因爲我可以通過Navicat訪問表。這兩個字段都是varchar字段。

任何人都可以指出我正確的方向嗎?
謝謝。

+0

在類方法中使用'gloabl'是很差的編碼,它完全破壞了類的封裝。正如你擴展了DatabaseObject類,你不能使用'$ this-> database - > ....' – RiggsFolly 2014-11-25 13:03:28

+0

我的DatabaseObject在一個不同的文件中擴展了一個名爲Database的類,如果不使用全局的話(我從中學到的教程展示了它那樣)我該如何獲得數據庫信息? – Jim 2014-11-25 13:30:22

+0

如果每個類'擴展'前一個,那麼使用'$ this-> a_property'將查看$ a_property的當前對象,如果沒有找到,將查找該屬性的擴展類層次結構直到找到它。只要每個新類都擴展了子類即前一個,那麼這些類是否在不同的物理文件中定義並不重要。如果你的教程建議在類結構中使用'global',那麼找一個更好的教程。 – RiggsFolly 2014-11-25 13:37:46

回答

0

變化

$sql = "SELECT * FROM ".static::$table_name; 

$sql = "SELECT * FROM ".self::$table_name; 

此外,

$result_array = static::find_by_sql($sql); 

$result_array = self::find_by_sql($sql); 

呦你需要使用字self而不是static

+0

靜態工作,因爲我從查詢中得到結果,所以爲什麼我需要將它們從靜態變爲自我?那會讓我失去最後一個領域嗎? – Jim 2014-11-25 13:04:07

+0

@Jim閱讀這個,這將清除關於自我和靜態的東西。 http://stackoverflow.com/questions/4718808/php-can-static-replace-self – Jordy 2014-11-25 13:09:15

+0

我做了更改,我仍然爲NULL和FNAME和LNAME,所以我不認爲這有所作爲 – Jim 2014-11-25 13:24:13