Creating a database table inside a class as a function

I am trying to do the trick of shortening my code, not only for readability, but also for setting up the project I'm working on.

I created a class that connects to a DataBase, but I'm struggling with a function to use that will create a table with columns.

The class looks like this:

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."); } } 

As you can see, the request method has already been added. An example of how it is executed:

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

Can someone send me a code to add a function to add an insert table? I tried this:

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

Using:

 $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); 
+5
source share
1 answer

I would recommend looking at MySQLi or PDO , as you are using the deprecated mysql function, which is vulnerable as it stands right now. I updated your class (not tested) to get you started. It also fixes your initial inability to create table problem.

 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 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(); } } 
+1
source

Source: https://habr.com/ru/post/1237146/


All Articles