Класс подключения / отключения базы данных OOP

Я только начал изучать концепцию объектно-ориентированного программирования и собрал класс для подключения к базе данных, выбора базы данных и закрытия соединения с базой данных. Пока все работает нормально, кроме закрытия соединения с базой данных.

class Database { private $host, $username, $password; public function __construct($ihost, $iusername, $ipassword){ $this->host = $ihost; $this->username = $iusername; $this->password = $ipassword; } public function connectdb(){ mysql_connect($this->host, $this->username, $this->password) OR die("There was a problem connecting to the database."); echo 'successfully connected to database<br />'; } public function select($database){ mysql_select_db($database) OR die("There was a problem selecting the database."); echo 'successfully selected database<br />'; } public function disconnectdb(){ mysql_close($this->connectdb()) OR die("There was a problem disconnecting from the database."); } } $database = new database('localhost', 'root', 'usbw'); $database->connectdb(); $database->select('msm'); $database->disconnectdb(); 

Когда я пытаюсь отключиться от базы данных, появляется следующее сообщение об ошибке:

 Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in F:\Programs\webserver\root\oop\oop.php on line 53 

Я предполагаю, что это не так просто, как размещение метода connectdb в скобках функции mysql_close, но не может найти правильный способ сделать это.

благодаря

Solutions Collecting From Web of "Класс подключения / отключения базы данных OOP"

Я бы добавил переменную connection / link в ваш класс и использовал деструктор. Это также избавит вас от необходимости забывать закрыть соединение, потому что это происходит автоматически.
Это ссылка $ this->, которую вам нужно передать в mysql_close ().

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

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

 <?php $db = new Database("localhost", "username", "password", "testDatabase"); $result = $db->query("SELECT * FROM students"); while ($row = mysql_fetch_assoc($result)) { echo "First Name: " . $row['firstname'] ."<br />"; echo "Last Name: " . $row['lastname'] ."<br />"; echo "Address: " . $row['address'] ."<br />"; echo "Age: " . $row['age'] ."<br />"; echo "<hr />"; } ?> 

Редактировать:
Поэтому люди действительно могут использовать класс, я добавил недостающие свойства / методы.
Следующим шагом будет расширение метода запроса, включение защиты от инъекции и любых других вспомогательных функций.
Я внесла следующие изменения:

  • Добавлены недостающие частные свойства
  • Добавлено __construct ($ host, $ username, $ password, $ database)
  • Объединенные connectdb () и select () в __construct () сохраняют дополнительные две строки кода.
  • Добавленный запрос ($ query)
  • Пример использования

Если я сделал опечатку или ошибку, оставьте конструктивный комментарий, чтобы я мог исправить это для других.

вы ничего не возвращаете из connectdb() но вы возвращаете эту функцию в mysql_close() .

Вы должны знать, что функции mysql_* были введены в PHP 4, что более 1-го года назад. Этот API очень старый, и процесс начал фактически обесценивать это расширение .

Вы не должны в 2012 году писать новый код с mysql_* .

Существуют две очень хорошие альтернативы: PDO и MySQLi . Оба из них уже написаны с учетом объектно-ориентированного кода, и они также дают вам возможность использовать подготовленные заявления .

Этот пример, который вы показали в оригинальной записи, написанной с помощью PDO, будет выглядеть так:

 //connect to the the database $connection = new PDO('mysql:host=localhost;dbname=msm', 'username', 'password'); //disconnects $connection = null; 

Конечно, есть более сложный случай использования, но точка ожидания – время для развития.

mysql_close требует отключения параметра, но вы ничего не предоставляете.


 класс База данных {

     private $ host, $ username, $ password, $ con;

     public function __construct ($ ihost, $ iusername, $ ipassword) {
         $ this-> host = $ ihost;
         $ this-> username = $ iusername;
         $ this-> password = $ ipassword;
         $ this-> con = false;
     }


     public function connect () {
         $ connect = mysql_connect ($ this-> host, $ this-> имя пользователя, пароль $ this->);
         return $ connect;
     }


     public function connectdb () {
         $ conn = $ this-> connect ();
         если ($ сопп)
         {
             $ this-> con = true;
             эхо "Успешно подключено. 
«; return true; } else { echo "Извините, не удалось подключиться.
«; return false; } } публичная функция select ($ database) { если ($ this-> кон) { если (mysql_select_db ($ базы данных)) { echo "Успешно подключенная база данных. $ database.
«; return true; } еще { echo "Неизвестная база данных.
«; } } else { echo "Нет активного соединения.
«; return false; } } public function disconnectdb () { если ($ this-> кон) { если (mysql_close ($ this-> подключения ())) { $ this-> con = false; echo "Успешно отключен.
«; return true; } } еще { echo "Не удалось отключить.
«; return false; } } } $ database = новая база данных ('localhost', 'root', ''); $ Database-> connectdb (); $ Database-> выберите ( 'databaseoffacebook'); $ Database-> disconnectdb ();

Объектно-ориентированное программирование хорошо работает с PDO и mysqli. Попробуйте

 <?php class Database{ private $link; //private $host,$username,$password,$database; //private $status; public function __construct(){ $this->host = 'localhost'; $this->username = 'root'; $this->password = ''; $this->database = 'workclass'; $this->link = mysqli_connect($this->host,$this->username,$this->password); $this->status = mysqli_select_db($this->link,$this->database); if (!$this->status) { return $this->status="Failed to Connected with Database"; }else{ return $this->status="Database is connected"; } } } $object = new Database(); echo $object->status; ?>