0

これは私の接続クラスです。

class Database {
    private $host;
    private $port;
    private $dbname;
    private $username;
    private $password;

    function __construct($host, $port, $dbname, $username, $password) {
        $this->host = $host;
        $this->port = $port;
        $this->dbname = $dbname;
        $this->username = $username;
        $this->password = $password;

        try {
            $conn = new PDO("pgsql:host=$this->host port=$this->port dbname=$this->dbname", "$this->username", "$this->password");
            echo "PDO connection object created";
        }
        catch(PDOException $e) {
            echo $e->getMessage();
        }
    }

}

$db = new Database('host','5432','eu','eu','eu');

SQLインジェクションから安全な正しいQUERYクラスを行うのを手伝ってもらえますか?

ありがとう!

4

2 に答える 2

1

クラスから無駄なものをすべて取り出し、必要なクエリを追加しました。PDO 自体と同じくらいの保護を提供します。

class Database
{
    function __construct($host, $port, $dbname, $username, $password) {
        $dsn = "pgsql:host=$host;port=$port;dbname=$dbname";
        $this->conn = new PDO($dsn, $username, $password);
    }
    function query($query, $bind) {
        $stmt = $this->conn->prepare($query);
        $stmt->execute($bind);
        return $stmt;
    }
}
$db   = new Database('host','5432','eu','eu','eu');
$sql  = "SELECT * FROM users WHERE age > ? AND sex = ?";
$stmt = $db->query($sql, array(20,'F'));
$data = $stmt->fetchAll();
foreach ($data as $row) {
    echo $row['name'];
}
于 2013-08-13T19:26:09.670 に答える
-1

Tutsplus のこの優れたチュートリアルをチェックしてみてください。必要なもの (準備されたステートメント) などをカバーしています。extendまた、ラッパー クラスを作成するのではなく、PDO を作成することをお勧めします。一般的には、より柔軟です。

于 2013-08-13T17:27:04.113 に答える