2013-08-13 3 views
0

это мой класс связи.правильный путь запросов PDO

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'); 

Можете ли вы помочь мне с правильным классом QUERY, который будет безопасен от инъекций sql?

Спасибо!

+0

До тех пор, пока вы используете подготовленные заявления, вы в безопасности, и вам не требуется ни одна строка. См. Http://www.php.net/manual/en/pdostatement.bindparam.php и остальную часть руководства pdo в этом отношении. Один из многих очень полных руководств здесь: http://www.phpro.org/tutorials/Introduction-to-PHP-PDO.html – gview

+1

Это не класс запроса, который должен быть безопасным от инъекции, это ваши запросы. Если вы не используете ORM/автоматический построитель запросов (или по какой-то причине создаете свой собственный), вам необходимо понять технику * для написания безопасных запросов, таких как параметризованные запросы или правильно экранированные входы. – IMSoP

+0

Есть много хороших советов по этому вопросу: http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?rq=1 Не просто читайте наиболее высоко -отчет, прочитайте их все, почувствуйте проблемы и решения. – IMSoP

ответ

-1

Возможно, вы захотите проверить this excellent tutorial от Tutsplus. Они покрывают то, что вам нужно (подготовленные заявления) и многое другое! Я бы также предложил extend IN PDO вместо того, чтобы создавать класс обертки - он, как правило, более гибкий.

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']; 
} 
Смежные вопросы