带有mySQLi fetch的PHP OOP

带有mySQLi fetch的PHP OOP,php,oop,mysqli,Php,Oop,Mysqli,我对PHP OOP还比较陌生,我知道这里有很多问题,但没有一个能为我指明正确的方向。我已经创建了类user,我正在另一个文件中调用它 我试图让方法“reset”调用“connect”,连接到mysql数据库,然后查询它,并为行内容设置各种属性 我没有收到任何错误,但出于某种原因,它没有从数据库向属性提供任何数据 我试着将mySQL连接放在reset方法中,只是想看看变量是否不能在方法之间传递。但仍然没有快乐 谁能给我指出正确的方向吗 class user(){ public function

我对PHP OOP还比较陌生,我知道这里有很多问题,但没有一个能为我指明正确的方向。我已经创建了类user,我正在另一个文件中调用它

我试图让方法“reset”调用“connect”,连接到mysql数据库,然后查询它,并为行内容设置各种属性

我没有收到任何错误,但出于某种原因,它没有从数据库向属性提供任何数据

我试着将mySQL连接放在reset方法中,只是想看看变量是否不能在方法之间传递。但仍然没有快乐

谁能给我指出正确的方向吗

class user(){
  public function reset(){
    $this->connect();
    $sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
    $result = mysqli_query($con,$sql);

    while($row = mysqli_fetch_array($result))
  {
      $this->user_name=$row['dtype'];
      $this->user_id=$row['user_id'];
      $this->atype=$row['atype'];
      $this->user_email=$row['user_email'];
      $this->group1=$row['group1'];
      $this->group2=$row['group2'];
      $this->group3=$row['group3'];
      $this->group4=$row['group4'];
      $this->group5=$row['group5'];
      $this->group6=$row['group6'];   
  }

            // Test that these properties are actually being echoed on initial file... it is
    //  $this->user_name = "john";  
    //  $this->user_email = "john@gmail.com";
    //  $this->dtype = "d";
    //  $this->atype = "f";
}

public function connect(){
            //GLOBALS DEFINED IN INDEX.PHP
        if ($db_open !== true){
        $con=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
    // Check connection
    if (mysqli_connect_errno())
      {
        $debug_system .= 'Error on user.php: ' . mysqli_connect_error().'<br\/>';
      } else {
        $db_open = true;
        $debug_system .= 'user.php: user details grab successful. <br\/>';
         }
}
}
class用户(){
公共功能重置(){
$this->connect();
$sql='SELECT*来自用户,其中user_id=“.”.$user_id.'”;
$result=mysqli\u查询($con,$sql);
while($row=mysqli\u fetch\u数组($result))
{
$this->user_name=$row['dtype'];
$this->user\u id=$row['user\u id'];
$this->atype=$row['atype'];
$this->user_email=$row['user_email'];
$this->group1=$row['group1'];
$this->group2=$row['group2'];
$this->group3=$row['group3'];
$this->group4=$row['group4'];
$this->group5=$row['group5'];
$this->group6=$row['group6'];
}
//测试这些属性是否在初始文件中实际被回响…确实如此
//$this->user_name=“john”;
//$this->user\u email=”john@gmail.com";
//$this->dtype=“d”;
//$this->atype=“f”;
}
公共功能连接(){
//INDEX.PHP中定义的全局变量
如果($db_open!==true){
$con=mysqli\u connect(DB\u主机、DB\u用户、DB\u密码、DB\u名称);
//检查连接
if(mysqli\u connect\u errno())
{
$debug_system.='user.php上的错误:'.mysqli_connect_Error()';
}否则{
$db_open=true;
$debug_system.='user.php:用户详细信息抓取成功';
}
}
}

}

如果您对PHP OOP比较陌生,强烈建议您不要弄乱糟糕的mysqli API,而是首先学习非常明智的PDO,只有这样,熟悉OOP和准备好的语句,您才可以使用mysqli


然而,类
user
中不应该没有函数
connect()
。您必须有一个独特的db处理类,该类实例必须在
用户
类的构造函数中传递如果您对PHP OOP比较陌生,强烈建议不要弄乱糟糕的mysqli API,而要先学习非常合理的PDO,然后再学习,为了熟悉OOP和准备好的语句,您可以使用mysqli


然而,类
user
中不应该没有函数
connect()
。您必须有一个独特的db处理类,该类实例必须在
用户
类的构造函数中传递如果您对PHP OOP比较陌生,强烈建议不要弄乱糟糕的mysqli API,而要先学习非常合理的PDO,然后再学习,为了熟悉OOP和准备好的语句,您可以使用mysqli


然而,类
user
中不应该没有函数
connect()
。您必须有一个独特的db处理类,该类实例必须在
用户
类的构造函数中传递如果您对PHP OOP比较陌生,强烈建议不要弄乱糟糕的mysqli API,而要先学习非常合理的PDO,然后再学习,为了熟悉OOP和准备好的语句,您可以使用mysqli


然而,类
user
中不应该没有函数
connect()
。您必须有一个独特的db处理类,必须在
user
class

的构造函数中传递该实例。问题在于这一行:

$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
您在任何时候都没有实际定义
$user\u id
。大概你的意思是
$this->user\u id

$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
更好的做法是充分利用参数化查询,如下所示:

$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将
准备
语句并
绑定
用户ID,然后
执行
查询:

$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);
然后获取结果:

while($row = mysqli_stmt_fetch($result))

如您所见,现代MySQL库的负载更大。在进一步使用MySQLi和参数化查询之前,我建议您对它们的工作原理做更多的研究(也许还有PDO:它是一个高级库)。这是值得努力的。

问题在于这一行:

$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
您在任何时候都没有实际定义
$user\u id
。大概你的意思是
$this->user\u id

$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
更好的做法是充分利用参数化查询,如下所示:

$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将
准备
语句并
绑定
用户ID,然后
执行
查询:

$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);
然后获取结果:

while($row = mysqli_stmt_fetch($result))

如您所见,现代MySQL库的负载更大。在进一步使用MySQLi和参数化查询之前,我建议您对它们的工作原理做更多的研究(也许还有PDO:它是一个高级库)。这是值得努力的。

问题在于这一行:

$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;
您在任何时候都没有实际定义
$user\u id
。大概你的意思是
$this->user\u id

$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;
更好的做法是充分利用参数化查询,如下所示:

$sql ='SELECT * FROM users WHERE user_id=?' ;
然后,您将
准备
语句并
绑定
用户ID,然后
执行
查询:

$stmt = mysqli_prepare($sql);
mysqli_stmt_bind_param($stmt, $this->user_id);
mysqli_stmt_execute($stmt);
然后获取结果:

while($row = mysqli_stmt_fetch($result))
如您所见,现代MySQL库的负载更大。我建议您对MySQLi和参数化查询的工作原理进行更多的研究