我有一个用户表,其中包含我想在登录用户的mysql查询中访问的一堆列。最终,我希望这些列中的值形成一个User对象。是否有一个标准函数来执行此操作,或者我是否基本上需要将查询的每个值传递给新的User语句,以便将它们传递给User类的构造函数?
答案 0 :(得分:5)
mysql_fetch_object()
允许您指定类名,以便根据结果构建该类的实例:
$result = mysql_query($sql); // Error handling not included
if (mysql_num_rows($result) == 1) {
$user = mysql_fetch_object($result, 'User');
}
除非您指定与SELECT
查询中列出的列对应的属性及其访问修饰符,否则它们将默认为public
。
在填充其属性后,您的对象的构造函数被称为。您可以在构造函数中执行要执行的任何更改或其他任务。
答案 1 :(得分:2)
答案 2 :(得分:1)
你应该结帐mysqli_result::fetch_object
。您还可以查看PHP's PDO extension。
首先,要知道你的桌子。
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(256) NOT NULL,
`password` VARCHAR(256) NOT NULL,
PRIMARY KEY (`id`)
);
创建您的对象。您无需定义任何这些字段,因为默认情况下它们会以public
的形式添加到您的对象中,但对于可能稍后维护您的代码的任何人都很清楚;为了清晰起见定义字段。由于字段是私有的,因此访问器和变换器是必需的。
class User {
private $id;
private $username;
private $password;
public function __construct($id, $username, $password) {
$this->id = $id;
$this->username = $username;
$this->password = $password;
}
public function getId() { return $this->id; }
public function setId($id) { $this->id = $id; }
public function getUsername() { return $this->username; }
public function setUsername($username) { $this->username = $username; }
public function getPassword() { return $this->password; }
public function setPassword($password) { $this->password = $password; }
}
创建一个查询类。其中很多是样板代码,可以将其提取到抽象类中。
class UserQuery {
public function create() {
return new self();
}
public function findById($id) {
$user = null;
$conn = mysqli_connect("localhost", "root", "pass", "company_db");
if ($conn->connect_error)
die("$conn->connect_errno: $conn->connect_error");
$query = "SELECT * FROM `user` WHERE `id` = ?";
$stmt = $conn->stmt_init();
if (!$stmt->prepare($query)) {
print "Failed to prepare statement\n";
} else {
$stmt->bind_param('i', $id);
$stmt->execute();
$result = $stmt->get_result();
$obj = $result->fetch_object();
return new User($obj->id, $obj->username, $obj->password);
}
$stmt->close();
$conn->close();
return null;
}
}
从User
表中获取user
个对象。
$user = UserQuery::create()->findById(1);
printf("Found user: %s", $user->getUsername());