【发布时间】:2016-05-17 09:16:17
【问题描述】:
我不确定为什么没有在浏览器中返回/输出全名。任何人都可以帮忙吗?我有一个包含特定类的类文件,只是为了更有条理的文件结构。数据库类包含与数据库有关的所有当前方法,用户类包含用户的方法,我在用户类中调用数据库中的一些方法,但我确定方法和属性的范围是设置正确吗?
classes.php:
include 'database.php';
include 'user.php';
$user = User::getUserId(1);
echo $user->getName();
数据库.php
<?php
require_once("../core/config.php");
class Database {
private $connection;
function __construct() {
$this->connect();
}
public function connect() {
$this->connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME);
if(mysqli_connect_errno()) {
die("Database connection failed: " .
mysqli_connect_error() .
" (" . mysqli_connect_errno() . ")"
);
}
}
public function disconnect() {
if(isset($this->connection)) {
mysqli_close($this->connection);
unset($this->connection);
}
}
public function query($sql) {
$result = mysqli_query($this->connection, $sql);
if (!$result) {
die("Database query failed.");
}
return $result;
}
public function prepare($data) {
$escString = mysqli_real_escape_string($this->connection, $data);
return $escString;
}
public function fetchArray($results) {
return mysqli_fetch_array($results);
}
}
$db = new Database();
?>
用户.php
<?php
class User {
public $userId;
public $username;
public $password;
public $email;
public $firstname;
public $lastname;
public $access;
public $active;
public static function getUsers() {
return self::getBySQL("SELECT * FROM users");
}
public static function getUserId($id=0) {
global $db;
$result = self::getBySQL("SELECT * FROM users WHERE userId={$id} LIMIT 1");
return !empty($result) ? array_shift($result) : false;
}
public static function getBySQL($sql) {
global $db;
$result = $db->query($sql);
$objArray = array();
while ($row = $db->fetchArray($result)) {
$objArray[] = self::instantiate($row);
}
return $objArray;
}
public function getName() {
if (isset($this->firstname) && isset($this->lastname)) {
return $this->firstname . " " . $this->lastname;
} else {
return "";
}
}
private static function instantiate($record) {
$object = new self;
foreach($record as $attr=>$value){
if($object->hasAttr($attr)) {
$object->$attr = $value;
}
}
return $object;
}
private function hasAttr($attr) {
$objectVars = get_object_vars($this);
return array_key_exists($attr, $objectVars);
}
}
?>
【问题讨论】:
-
var_dump($user); 的结果是什么
-
@RaviHirani object(User)#4 (8) { ["userId"]=> string(1) "1" ["username"]=> NULL ["password"]=> NULL ["email"]=> NULL ["firstname"]=> NULL ["lastname"]=> NULL ["access"]=> NULL ["active"]=> NULL }
-
您是否正确检查了数据库中是否存在用户?如果是,那么 DB 中的所有字段都为 NULL?
-
@RaviHirani 是的,用户以 userId 1 存在,什么值必须为空?每个字段都有值,我自己的详细信息,因为我刚刚在数据库中输入了我的第一条记录。
-
@RaviHirani 我刚刚在 phpmyadmin 中使用了查询,它返回 userId 为 1 的记录,但转储为其他值返回 NULL,所以实际方法中的问题是什么?
标签: php mysql class oop object