【问题标题】:PHP OOP with mySQLi fetch使用 mySQLi 获取的 PHP OOP
【发布时间】:2013-11-16 06:02:29
【问题描述】:

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

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

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

我曾尝试将mySQL connect 放在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\/>';
         }
}
}

}

【问题讨论】:

  • 使用 $user = mysqli_fetch_object($result, 'user');

标签: php oop mysqli


【解决方案1】:

如果您对 PHP OOP 比较陌生,强烈建议不要乱用糟糕的 mysqli API,而是先学习相当明智的 PDO,然后才能让自己熟悉OOP和prepared statements,你可以转向mysqli。

尽管如此,user 类中不应该没有函数connect()。您必须有一个独特的数据库处理类,该实例必须在 user 类的构造函数中传递

【讨论】:

    【解决方案2】:

    问题出在这一行:

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

    在任何时候你都没有真正定义$user_id。大概你的意思是$this-&gt;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:它是一个高级库)进行更多研究。这将是值得的。

    【讨论】:

      猜你喜欢
      • 2018-11-23
      • 2015-05-05
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      相关资源
      最近更新 更多