/ / ¿Las funciones mysql abren una nueva conexión mysql si no se especifica el enlace mysql? - php, mysql, codeigniter

¿Las funciones mysql abren una nueva conexión mysql si no se especifica el enlace mysql? - php, mysql, codeigniter

¿Las funciones como mysql_query, mysql_real_escape o mysql_error abren un nuevo enlace mysql si no se especifica?

php.net dice que

La conexión de MySQL. Si no se especifica el identificador del enlace, se asume el último enlace abierto por mysql_connect ()

Pero ¿y si la conexión se hizo dentro de una clase? ¿Sabe php cómo encontrar ese enlace?

(Estoy usando el framework codeigniter si es de alguna ayuda)

Respuestas

2 para la respuesta № 1

Lo que realmente estás preguntando es si tu base de datosla conexión se hará con respecto al patrón Singleton o no, y la respuesta es obviamente "no". Si crea una instancia de la clase en varios lugares, cada instancia tendrá su propio recurso. Como consecuencia, lo que esto significa es que, independientemente de la instancia desde la que llame a mysql_query, usará la última instancia que se detectará, que en realidad se creará durante su última instanciación de la clase que realiza la conexión.

[Edición posterior]

Entrarás en esa situación si tienes algo similar con:

    //Database.class.php

class Database {
public function connect_db() {
//connection logic here
}

public static function query_db($query) {
$this->connect_db();
//query database logic here
}

}


//index.php
include "path/to/Database.class.php";

$sql = "SELECT * FROM `whatever_i_want`";
Database::query_db($sql);

//repeat the last two lines multiple times

Ahora, este es un mal diseño. En este escenario, creará una conexión cada vez que consulte la base de datos. Para evitar esto, el siguiente pequeño cambio debería hacer el truco:

    //Database.class.php
public function __construct() {
$this->connect_db();
}

public function query_db($query) {
//query database logic here
//note the missing call to connect_db()
}
//the rest remains unchanged

//index.php
$db = new Database();

$db->query_db($sql);
//the rest remains unchanged

Por favor, tenga en cuenta que esto no es Singleton,el patrón del que te hablé anteriormente, y tampoco es un buen diseño. Esto es solo para mostrar cómo PHP decide qué conexión usar. El último ejemplo hace que la conexión a la base de datos solo se realice una vez, y después de eso, independientemente de la cantidad de consultas que ejecute, utilizará el recurso de conexión obtenido al crear una instancia de la clase.

Ahora, si modificamos el último ejemplo y lo agregamos a index.php:

    //index.php
$db2 = new Database();

$db2->query_db($sql);
$db->query_db($sql);

Ambas consultas utilizarán el recurso obtenido al crear el objeto $ db2, ya que será la última que detectará PHP.