Classe de conexão / desconectável do database OOP

Acabei de aprender o conceito de programação orientada a objects e reuni uma class para conexão a um database, selecionando database e fechando a conexão do database. Até agora tudo parece funcionar bem, exceto fechando a conexão ao database.

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
'; } public function select($database){ mysql_select_db($database) OR die("There was a problem selecting the database."); echo 'successfully selected database
'; } 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();

Quando eu tentar desconectar do database, recebo a seguinte mensagem de erro:

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

Eu acho que não é tão simples como colocar o método connectdb dentro dos parênteses da function mysql_close, mas não consegue encontrar o caminho certo para fazê-lo.

obrigado

Eu adicionaria uma variável de conexão / link à sua class e usaria um destruidor. Isso também irá salvá-lo de ter que lembrar de fechar sua conexão, porque é feito automaticamente.
É o link $ this-> que você precisa passar para o seu 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."); } } 

Exemplo de uso:

 query("SELECT * FROM students"); while ($row = mysql_fetch_assoc($result)) { echo "First Name: " . $row['firstname'] ."
"; echo "Last Name: " . $row['lastname'] ."
"; echo "Address: " . $row['address'] ."
"; echo "Age: " . $row['age'] ."
"; echo "
"; } ?>

Editar:
Então, as pessoas podem realmente usar a class, adicionei as propriedades / methods que faltam.
O próximo passo seria expandir o método de consulta, include proteção contra injeção e outras funções auxiliares.
Eu fiz as seguintes alterações:

  • Adicionado as propriedades privadas faltantes
  • Adicionado __construct ($ host, $ username, $ password, $ database)
  • Fusionado connectdb () e selecione () em __construct () salvando duas linhas de código extra.
  • Consulta adicionada ($ query)
  • Exemplo de Uso

Por favor, se eu cometi um erro de digitação ou erro, deixe um comentário construtivo, para que eu possa corrigi-lo para os outros.

você não está retornando nada do connectdb() mas você está passando o retorno dessa function para mysql_close() .

Você deve estar ciente de que mysql_* funções mysql_* foram introduzidas no PHP 4, que é mais do que 1 seu mysql_* . Esta API é extremamente antiga, e o processo começou a realmente depreciar essa extensão .

Você não deve, em 2012, escrever um novo código com funções mysql_* .

Existem duas alternativas muito boas: PDO e MySQLi . Ambos os quais já foram escritos com o código orientado a objects em mente, e eles também lhe dão capacidade de usar declarações preparadas .

Esse exemplo que você mostrou na publicação original escrita com DOP seria assim:

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

Claro que há casos de uso mais complicados, mas o ponto de espera para evoluir.

mysql_close requer um parâmetro para desconectar, mas você não está fornecendo nada.


 class Base de dados {

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

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


     function pública connect () {
         $ connect = mysql_connect ($ this-> host, $ this-> username, $ this-> password);
         retornar $ connect;
     }


     function pública connectdb () {
         $ conn = $ this-> connect ();
         se ($ conn)
         {
             $ this-> con = true;
             eco "Conectado com sucesso. 
"; retornar verdadeiro; } outro { Echo "Desculpe, não foi possível conectar.
"; retorna falso; } } Seleção de function pública ($ database) { se ($ this-> con) { se (mysql_select_db ($ database)) { echo "database conectado com sucesso. $ database.
"; retornar verdadeiro; } outro { echo "database desconhecido.
"; } } outro { echo "Nenhuma conexão ativa.
"; retorna falso; } } function pública disconnectdb () { se ($ this-> con) { se (mysql_close ($ this-> connect ())) { $ this-> con = false; eco "Desligado com sucesso.
"; retornar verdadeiro; } } outro { echo "Não foi possível desconectar.
"; retorna falso; } } } $ database = new database ('localhost', 'root', ''); $ database-> connectdb (); $ database-> select ('databaseoffacebook'); $ database-> disconnectdb ();

A programação orientada a objects funciona bem com o PDO e o mysqli. De uma chance

 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; ?>