我对这个问题非常困惑。我试图从我的数据库获取信息,但它只是部分工作。我有一个名为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字段。
任何人都可以指出我正确的方向吗?
谢谢。
在类方法中使用'gloabl'是很差的编码,它完全破坏了类的封装。正如你扩展了DatabaseObject类,你不能使用'$ this-> database - > ....' – RiggsFolly 2014-11-25 13:03:28
我的DatabaseObject在一个不同的文件中扩展了一个名为Database的类,如果不使用全局的话(我从中学到的教程展示了它那样)我该如何获得数据库信息? – Jim 2014-11-25 13:30:22
如果每个类'扩展'前一个,那么使用'$ this-> a_property'将查看$ a_property的当前对象,如果没有找到,将查找该属性的扩展类层次结构直到找到它。只要每个新类都扩展了子类即前一个,那么这些类是否在不同的物理文件中定义并不重要。如果你的教程建议在类结构中使用'global',那么找一个更好的教程。 – RiggsFolly 2014-11-25 13:37:46