2016-12-01 2 views
0

Итак, я написал простой класс MySQLi (поцарапан из разных учебников + свои собственные знания), и я хотел бы, чтобы вы указали какие-либо ошибки и/или что мне следует добавить/изменить/удалить. Большое спасибо. Вот код:Нужны советы по подключению OOP PHP MySQL

dbclass.php

<?php 
    class Database 
    { 
     protected static $connection; 

     public function __construct() 
     { 
      self::$connection = $this->connect(); 
     } 

     public function __destruct() 
     { 
      self::$connection->close(); 
     } 

     private function connect() 
     { 
      if (!isset(self::$connection)) 
      { 
       $config = parse_ini_file("dbsettings.ini"); 
       self::$connection = new mysqli($config["host"], $config["username"], $config["password"], $config["database"]); 
      } 

      if (!self::$connection) 
       return false; 

      return self::$connection; 
     } 

     public function query($query) 
     { 
      $result = self::$connection->query($query); 
      return $result; 
     } 

     public function select($query) 
     { 
      $rows = array(); 
      $result = $this->query($query); 

      if (!$result) 
       return false; 

      while ($row = $result->fetch_assoc()) 
      { 
       $rows[] = $row; 
      } 

      return $rows; 
     } 

     public function escape($value) 
     { 
      $value = htmlspecialchars($value, ENT_QUOTES, "UTF-8"); 
      return "'".self::$connection->real_escape_string($value)."'"; 
     } 
    }; 
?> 

Пример использования

<?php 
    require("php/require/dbclass.php"); 

    if (isset($_POST["login"])) 
    { 
     $conn = new Database; 

     $email = $conn->escape($_POST["email"]); 
     $password = $conn->escape($_POST["password"]); 

     $rows = $conn->select("SELECT * FROM users WHERE email = $email"); 

     if ($rows) 
     { 
      foreach ($rows as $row) 
      { 
       echo $row["username"]."<br />"; 
      } 
     } 
    } 
?> 
+0

чем вопрос? –

+3

Первый совет - узнайте о __prepared statements__ –

+0

Вы пытаетесь сделать свой класс dbclass singleton? –

ответ

-1

Stack Overflow не сайт код обзора, но до сих пор. Не лучше ли сделать код для вас? Вы уверены, что хотите написать, что побег вызов вручную для каждой переменной (с риском забывая что), а не только простой линии, как этот

$conn = new Database; 
    $rows = $conn->select("SELECT * FROM users WHERE email = ?", [$_POST["email"]]); 
+0

Не знал об этом, спасибо:) – daavid245