带有mySQLi fetch的PHP OOP

时间:2013-11-05 11:16:13

标签: php oop mysqli

我对PHP OOP比较陌生,我知道SO上有很多问题,但是没有一个问题可以指向我正确的方向。我创建了类用户,我在另一个文件中调用它。

我试图让方法'重置'来调用'connect',连接到mysql db然后查询它并为行内容设置各种属性。

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

我尝试在重置方法中放置mySQL connect,只是为了查看变量是否无法在方法之间传递。但仍然没有快乐。

有人能指出我正确的方向吗?

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\/>';
         }
}
}

}

2 个答案:

答案 0 :(得分:2)

如果你对PHP OOP比较陌生,那么强烈推荐不要搞砸了糟糕的mysqli API,而是首先要学会非常明智的 PDO ,然后才开始熟悉OOP和准备好的陈述,你可以转向mysqli。

尽管如此,班级connect()中不应该有任何功能user。您必须拥有一个独特的数据库处理类,该实例必须在user

的构造函数中传递

答案 1 :(得分:1)

问题出在这一行:

$sql ='SELECT * FROM users WHERE user_id="'.$user_id.'"' ;

你真的没有定义$user_id。大概你实际上是指$this->user_id

$sql ='SELECT * FROM users WHERE user_id="'.$this->user_id.'"' ;

最好还是充分利用参数化查询,这可能如下所示:

$sql ='SELECT * FROM users WHERE user_id=?' ;

然后您将prepare语句bind用户ID,然后execute查询:

$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:它是一个优秀的库)。值得努力。