2014-11-25 62 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