2015-12-01 19 views
5

Tôi đang cố gắng thực hiện thủ thuật rút ngắn mã của mình không chỉ cho khả năng đọc mà còn cho việc tùy chỉnh dự án mà tôi đang thực hiện.Tạo một Bảng DataBase bên trong một Lớp với chức năng

Tôi đã tạo một lớp kết nối với DataBase nhưng đang vật lộn với một hàm để sử dụng sẽ tạo ra một bảng có các cột.

Lớp trông như thế này cho đến nay:

class DataBase { 

    private $link; 
    private $host, $username, $password, $database; 

    public function __construct($host, $username, $password, $database){ 
     $this->host  = $host; 
     $this->username = $username; 
     $this->password = $password; 
     $this->database = $database; 

     $this->link = mysql_connect($this->host, $this->username, $this->password) 
      OR die("There was a problem connecting to the database."); 

     mysql_select_db($this->database, $this->link) 
      OR die("There was a problem selecting the database."); 

     return true; 
    } 

    public function query($query) { 
     $result = mysql_query($query); 
     if (!$result) die('Invalid query: ' . mysql_error()); 
     return $result; 
    } 

    public function __destruct() { 
     mysql_close($this->link) 
      OR die("There was a problem disconnecting from the database."); 
    } 
} 

Như bạn có thể thấy các phương pháp truy vấn đã được thêm vào. Một ví dụ về cách chạy của nó là:

$db = new DataBase('localhost',$user,$pass,$name); 
$db->query('SELECT * FROM table WHERE id="0"'); 

Có ai có thể gửi cho tôi một số mã để thêm chức năng để thêm bảng chèn? Tôi đã cố gắng này:

public function create_table($t_data) { 
    $result = $t_data; 
    if (!$result) die('Invalid query: ' . mysql_error()); 
    return $result; 
} 

Cách sử dụng:

$t_data = 'CREATE TABLE log_users(
    uid VARCHAR(1024) NOT NULL, 
    username VARCHAR(33) NOT NULL, 
    password VARCHAR(18) NOT NULL, 
    admin VARCHAR(1) DEFAULT 0, 
    key VARCHAR(18) NOT NULL, 
    constant VARCHAR(1) DEFAULT 0)'; 

$db->create_table($t_data); 
+0

Xin chào, chức năng 'query' hiện tại của bạn cực kỳ dễ bị tấn công SQL Injection, bạn không làm vệ sinh hoặc chuẩn bị truy vấn để kẻ tấn công có thể dễ dàng phá hủy hoặc xâm phạm cơ sở dữ liệu của bạn. Bạn cũng đang sử dụng thư viện 'mysql' không được dùng trong nhiều năm, ít nhất bạn nên sử dụng' mysqli' hoặc tốt hơn là 'PDO'. PDO sẽ giúp bạn tiết kiệm rất nhiều đau đầu và tôi đã viết một khung cơ bản ở đây cho một lớp DB xử lý các cuộc tấn công SQL injection https://github.com/alexmk92/ASFramework/blob/master/app/core/models/Database.php – Alex

+0

@Alex Thankyou rất nhiều! Đó là những gì tôi cần! Tôi sẽ giữ một liên kết trong mã nguồn cho việc này! –

+0

Câu hỏi, tôi sẽ sử dụng điều này như thế nào? Tôi không quen với SQLi. Có thể là: $ db = new Database(); $ db-> fetch ('SELECT FROM * table'); và làm cách nào để tôi tạo một bảng với những thứ này? Ngoài ra, cảm ơn bạn! @Alex –

Trả lời

1

tôi sẽ khuyên bạn nên nhìn MySQLi hoặc PDO kể từ khi bạn đang sử dụng các chức năng phản mysql đó là dễ bị tổn thương như nó đứng ngay bây giờ. Tôi đã cập nhật lớp học của bạn (chưa được kiểm tra) để giúp bạn bắt đầu. Điều này cũng khắc phục sự cố ban đầu của bạn về việc không thể tạo bảng.

class DataBase { 

    private $link; 
    // May not need these, see updated __construct method 
    private $host, $username, $password, $database; 

    public function __construct($host, $username, $password, $database){ 
     // Unless you need them elsewhere, no reason to set $this->host, $this->username, etc...you can just access directly like below 
     $this->link = new mysqli($host, $username, $password, $database); 

     // Check connection (which also checks selection of database) 
     if ($this->link->connect_error) { 
      die("Connection failed: " . $this->link->connect_error); 
     } 
    } 

    // You will need to research and update this to work with mysqli (right now it's ripe for SQL injection)! 
    public function query($query) { 
     $result = mysql_query($query); 
     if (!$result) die('Invalid query: ' . mysql_error()); 
     return $result; 
    } 

    // This method will create a table based on the SQL you send it 
    public function create_table($sql) { 
     if ($this->link->query($sql) === TRUE) { 
      return "Table created successfully"; 
     } else { 
      return "Error creating table: " . $this->link->error; 
     } 
    } 

    // Close connection 
    public function __destruct() { 
     $this->link->close(); 
    } 
} 
Các vấn đề liên quan