MySQL oop方法调用


Mysqli oop method call

我对使用mysqli实现OOP非常陌生,我有一个名为Database的Object(class),我真正的问题是如何在index.php中调用我的select方法,以及如何使用它

Database Class.php如下:

Class Database{
private $host = null;
private $user = null;
private $pass = null;
private $db = null;
public $error = "Error Po Sir!";
public $con;

public function connect($host, $user, $pass, $db){
    $this->host = $host;
    $this->user = $user;
    $this->pass = $pass;
    $this->db = $db;
    $this->con = mysqli_connect($this->host, $this->user, $this->pass);
        if(mysqli_connect_errno()){
            echo "Connection Failed %s'n!", mysqli_connect_error();
            exit();
        }
}
public function select($condition){
    $query = "select os_user from users WHERE os_user = {$condition}";
    $result = mysqli_query($this->con,$query);
    return $result;
}
} 

我是这样实现的:

    require 'templates/dbclass.php'; 
$db = new Database();
$db->connect("localhost", "root", "", "os_db");
$username = $_POST['username'];
if($result = $db->select($username)){
    echo $username;
    if($result->num_rows > 0){
        while($row = $result->fetch_object()){
            echo $row->os_id;
        }
    }
}

但它没有显示任何结果。当我var_dump($result)时,我得到bool(false)

我已经启用了错误报告,但没有显示任何错误。

您的select函数存在3个问题

  • 易受SQL注入攻击
  • 它不进行错误检查
  • 它没用

以下是

public function query($sql, $bind)
{
    $db = $this->con;
    $stm = $db->prepare($sql) or trigger_error($db->error." [$sql]");
    $types = str_repeat("s", count($values));
    array_unshift($bind, $types);
    call_user_func_array(array($stm, 'bind_param'), $bind);
    $stm->execute() or trigger_error($db->error." [$sql]");
    $stm->store_result();
    return $stm->get_result();
}

像这个一样使用

$sql = "select os_user from users WHERE os_user = ?";
$res = $db->select($sql, $_POST['username']));
while($row = $result->fetch_object()){
    echo $row->os_id;
}