0

私はmysqliのものを使用してOOPを実装するのは本当に初めてです.Databaseという名前のこのオブジェクト(クラス)があります.私の本当の問題は、index.phpでselectメソッドを呼び出す方法と、それをどのように使用できるかです.

データベース 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)

エラー報告を有効にしましたが、エラーが表示されません。

4

1 に答える 1

0

あなたの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;
}
于 2013-08-10T13:31:56.427 に答える