我使用的是面向对象php的mysql,所以我创建了一个数据库,其中只有一个名为users的表,我想使用php类查询它(插入函数正常工作)
这是我的php用户类:
<?php
class user{
var $name;
var $surname;
var $email;
var $age;
function set_user_properties($pname, $psurname, $pemail, $page){
include "include.php";
$sql = "INSERT INTO users (name, surname, email, age)
VALUES ('$pname', '$psurname','$pemail', '$page')";
if ($conn->query($sql) === TRUE){
echo "New record created successfully";
}else{
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
function get_user_properties($name){
include "include.php";
$sql3 = "SELECT name, surname, email, age
FROM users
WHERE name='$name'";
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
// output data of each row
while($row3 = $result3->fetch_assoc()) {
$this->name=$row3["name"];
$this->surname=$row3["surname"];
$this->email=$row3["email"];
$this->age=$row3["age"];
}
}
$conn->close();
return $this;
}
}
?>
这是我想读取所有查询结果的页面:
<?php
include("class_lib.php");
$pname=$_POST["firstname"];
$user1=new user();
$user1->get_user_properties($pname);
echo $user1->name;
echo $user1->surname;
echo $user1->email;
echo $user1->age;
?>
我的问题是:当我创建一个应该只有多个结果的查询(比如这个)时,我如何将所有结果传递到目标页面?
问题是您的类只存储一个用户的信息,这意味着您不能真正期望它同时存储多个用户。
因此,问题是:"我如何获得一个用户数组,而不是一个?"答案是创建一个执行DB查询的类,并将查询结果的每一行解析为用户对象
引用代码的这一部分:
while($row3 = $result3->fetch_assoc()) {
$this->name=$row3["name"];
$this->surname=$row3["surname"];
$this->email=$row3["email"];
$this->age=$row3["age"];
}
如果您在用户类中添加一个构造函数来实例化具有名称、姓氏、电子邮件和年龄的用户,那么您的DB类中的代码看起来更像下面的
$users = array();
...
while($row3 = $result3->fetch_assoc()) {
$users[] = new user($row3["name"],
$row3["surname"],
$row3["email"],
$this->age=$row3["age"]);
}
...
return $users;
我希望这是有道理的。
感谢大家的帮助,我解决了添加构造函数和使用类方法的问题。这是代码,以防其他人在同一个问题上遇到困难。
这是class_lib.php,其中定义了all()方法,该方法使用查询的结果生成数组:
<?php
class User{
var $name;
var $surname;
var $email;
var $age;
function __construct($pname, $psurname, $pemail, $page){
$this->name=$pname;
$this->surname=$psurname;
$this->email=$pemail;
$this->age=$page;
}
public static function all(){
include "include.php";
$users=array();
$sql3 = "SELECT name, surname, email, age FROM users";
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
while($row3 = $result3->fetch_assoc()) {
$users[] = new User($row3["name"],$row3["surname"], $row3["email"],$row3["age"]);
}
}
$conn->close();
return $users;
}
?>
这是我调用all()方法的代码。在这种情况下,可变$users是一个User对象数组。
<?php include("class_lib.php");
$users=User::all(); //<-- this is the call to the class method.
?>