Вы должны оформить заказ mysqli_result::fetch_object
. Вы также можете посмотреть расширение PDO PHP .
Таблица
Во-первых, знай свой стол.
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());