2012-06-11 22 views
7

Donde hay tantas maneras de lograr el mismo resultado, me pregunto cuál es la forma más eficiente de inicializar una conexión mysql.Maneras más eficientes de conectarse a la base de datos mysql en varios archivos (PHP)

Nota: Recientemente también descubrí en la documentación de PHP que mysql_connect ahora está DESACTIVADO, todos mis códigos están actualmente usando mysql_connect. ¿Hay suficiente razón para cambiar?

Lo que estoy tratando de hacer es:

  1. crear un database.php.
  2. Las páginas PHP que se conectarán a la base de datos incluirán este archivo para que no tenga que escribir mucho código para conectarme a la base de datos.

Entonces, ¿qué debería hacer este database.php, para ser más eficiente.

1. $con = mysql_connect("etc"...) 
    mysql_select_db("databse") 

// desde aquí puedo incluir este archivo y comenzar a realizar consultas. - Funciona, pero no estoy seguro si es la mejor manera.

2. //database.php 
    $mysqli = new mysqli('localhost', 'user', 'pwd', 'database'); 
    // in other files 
    $mysqli->query("SELECT ...") 
  1. o debería utilizar conexión persistente? (El sitio es bastante base de datos-pesado, y no va a haber un montón de generación de la página, no más de 100 usuarios conectados simultáneamente en)

gracias de antemano

+0

Lo que estás haciendo se ve bien. – bumperbox

+1

las conexiones se reutilizan si se utilizan las mismas credenciales para la conexión, por lo que no hay mucho de qué preocuparse; pero sí, se lo alienta a que se aparte de mysql tan pronto como pueda. http://php.net/manual/en/mysqlinfo.api.choosing.php –

+0

@bumperbox dice en el manual que "ha quedado obsoleto a partir de PHP 5.5.0 y se eliminará en el futuro", así que depende cómo está usando php en el futuro puede tener problemas si se elimina y su host solo tiene la versión más reciente de php –

Respuesta

6

Acabo de cambiar todas las funciones de la extensión MySQL en mi código a PDO hoy.

el fin de ser más flexible, se debe crear "database.php" con una conexión general de esta manera:

<?php 
$pdo = new PDO('mysql:host=example.com;dbname=database;charset=UTF-8', 
       'username', 
       'password'); 

Luego, en otra página, utilice require() para incluir el archivo de la siguiente manera:

<?php 
require('database.php'); 

// Example with 'query' 
$queriedSQL = $pdo->query('SELECT * FROM table'); 

// Example with 'prepare' 
$preparedSQL = $pdo->prepare('SELECT * FROM other_table WHERE id = ?'); 
$preparedSQL->setFetchMode(PDO::FETCH_ASSOC); 

while($result = $queriedSQL->fetch(PDO::FETCH_ASSOC)) { 
    $preparedSQL->execute(array($result['id'])); 
    $preparedSQLResult = $preparedSQL->fetch(); 
    // Process code here 
} 

De otra manera, puede hacer que "index.php" sea el núcleo y luego procesar la URL o $_GET[] para incluir el archivo correspondiente (como todos los sistemas CMS, Wordpress, etc.).

De esta forma puede evitar cambiar la cantidad de código cuando algunos datos (nombre de host, nombre de usuario, contraseña y/o nombre de la base de datos) hayan cambiado.

Acerca de la conexión persistente, PHP lo permite, pero hay inconvenientes que se pueden encontrar en here.

+0

aquí: $ result = $ SQL-> fetch (PDO :: FETCH_ASSOC) ¿quisiste decir $ preparedSQL-> fetch? No veo $ SQL declarado en ningún lado – 40Plot

+0

@stackplasm Lo siento, quiero decir $ querySQL, me olvidé de cambiar el nombre de la variable cuando estoy agregando el ejemplo de preparación. Edité justo ahora. –

3

La primera cosa que debe hacer es crear un archivo mysql.config.php.

<?php 
define('MYSQL_HOST',''); 
define('MYSQL_USER',''); 
define('MYSQL_PASSWORD',''); 
define('MYSQL_DATABASE',''); 
?> 

La segunda cosa que debe hacer es crear un archivo mysql.class.php que se ocupa de todos los detalles de la conexión de base de datos (emulando este comportamiento). Simplemente agregue nuevas funciones para ampliar la funcionalidad, como la función numRows.

<?php 
require_once 'mysql.config.php'; 
class MySQL { 
private $query; 
private $result; 
public function __construct($host = MYSQL_HOST, $user = MYSQL_USER, $password = MYSQL_PASSWORD, $database = MYSQL_DATABASE) { 
    if (!$con = mysql_connect($host,$user,$password)) { 
     throw new Exception('Error connecting to the server'); 
    } 
    if (!mysql_select_db($database,$con)) { 
     throw new Exception('Error selecting database'); 
    } 
} 
public function query($query) { 
    $this->query = $query; 
    if (!$this->result = mysql_query($query)) { 
     throw new Exception('Error performing query '.$query); 
    } 
} 
public function numRows() { 
    if ($this->result) return mysql_num_rows($this->result); 
    return false; 
} 
} 
?> 

Lo último que debe hacer es usar estos archivos en su aplicación.

<?php 
require_once 'mysql.class.php'; 
try { 
    $db = new MySQL(); 
    $db->query('SELECT username FROM login WHERE username = "'.$USERNAME.'" LIMIT 1'); 
    if ($db->numRows() == 1) print_json(array('user'=>true),true); 
    else print_json(array('user'=>false),true); 
} catch(Exception $e) { 
    echo $e->getMessage(); 
    exit(); 
} 
?> 
+4

No está a favor de esto como una solución para una persona que comienza, en absoluto. Si va a crear un objeto para usar en varios archivos, enganche ese objeto en PDO (o mysqli) pero no aliente la función mysql. ¡Muy, muy simple cambio a su respuesta anterior solucionaría esto! – Robbie

+0

De acuerdo. Todavía no he aprendido sobre PDO o mysqli, pero si decides utilizar mysql, esta es la forma de proporcionar un marco orientado a objetos fácil de usar. –

1

En relación con el lenguaje de programación PHP, MySQL es el motor de base de datos de edad, y MySQLi es el motor mejorada. MySQLi aprovecha las características más nuevas de MySQL 5. Lifted text from php.sitio de la red:

  • interfaz orientada a objetos
  • Soporte para comandos preparados
  • soporte para comandos múltiples
  • Apoyo en transacciones
  • capacidades de depuración mejoradas
  • soporte de servidor Embedded Usted tiene la opción de usar mysql, mysqli o PDO esencialmente.

Si simplemente está buscando una base de datos relacional, no necesita buscar más allá de MySQL, aunque hay muchas opciones disponibles.

0

RE: "¿Debo usar conexión persistente"

No. Si su base de datos es "pesada", las conexiones persistentes no ayudan realmente - de hecho, pueden obstaculizar con scripts PHP que permanecen abiertos mucho tiempo mientras procesas datos. Las conexiones persistentes solo aceleran el tiempo para conectarse a la base de datos EN ALGUNAS CIRCUNSTANCIAS solamente. PUEDE ser capaz de ahorrar unos pocos ms por secuencia de comandos, pero perderá más funciones de limpieza en ejecución para liberar bloqueos o transacciones a menos que escriba con cuidado. Así que, a menos que tenga muchos scripts muy, muy cortos, obteniendo conexiones db breves y nítidas y luego moviéndose, o el servidor DB está muy lejos del servidor web, no se preocupe por este punto.

PDO se ha sugerido en otras respuestas, así que las he marcado ya que será la mejor para usted.

Cuestiones relacionadas