/ / PHP: $ mysqli no encontrado - php, base de datos, mysqli

PHP: $ mysqli no encontrado - php, base de datos, mysqli

Probablemente estoy haciendo algo realmente estúpido, pero este es el trato. He creado una clase llamada Base de datos, es muy simple y tiene solo 2 funciones. Solo por abrir y cerrar la conexión mysqli.

<?php

error_reporting(E_ALL);

require_once("sdl_config.php");

class Database {
/* Open the connection with the database */
public function OpenConnection() {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if($mysqli->connect_error) {
die("Connection Error (" . $mysqli->connect_errno . ") " . $mysqli->connect_error );
} else {
echo "Connection Succeeded";
}
}

/* Close the connection with the database */
public function CloseConnection() {
if($mysqli) {
$mysqli->close();
echo "Connection Closed";
} else {
echo "Connection does not exist";
}
}
}

Para probar esto, he creado otra página simplemente llamando a las 2 funciones.

<?php
require_once("include/class.database.php");

Database::OpenConnection();
Database::CloseConnection();

La apertura de la conexión funciona perfectamente, pero el problema se presenta en la función CloseConnection. Nunca encontrará la variable $ mysqli, ¿cómo es esto posible cuando la he abierto la línea antes?

También, he leído que algunas personas dicen que el cierrela conexión manualmente es algo obsoleta y otros dicen que es mejor hacerlo. Entonces, ¿cuál es la mejor práctica aquí y CUÁNDO se debe cerrar la conexión?

Gracias de antemano.

Respuestas

3 para la respuesta № 1

Las variables definidas dentro de las funciones son locales y visibles solo dentro de esa función.

Debe usar lo que OOP nos permite hacer y convertir esa variable en una propiedad de clase:

class Database {
private $mysqli;
/* Open the connection with the database */
public function OpenConnection() {
$this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if($this->mysqli->connect_error) {
die("Connection Error (" . $this->mysqli->connect_errno . ") " . $this->mysqli->connect_error );
} else {
echo "Connection Succeeded";
}
}

/* Close the connection with the database */
public function CloseConnection() {
if($this->mysqli) {
$this->mysqli->close();
echo "Connection Closed";
} else {
echo "Connection does not exist";
}
}
}

Pero ahora necesitas usar el objeto de una clase:

<?php
require_once("include/class.database.php");

$db = new Database;
$db->OpenConnection();
$db->CloseConnection();

Referencia: