borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Bookmarklets Nuevo
  2. Recetario básico para CakePHP/2 Nuevo
  3. Certificado auto-firmado Nuevo

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Reiniciar secuencia
  4. Vaciar un esquema
  5. Certificado auto-firmado
Compartir esta página

Conectarse a MySQL con PDO

PDO es, en general, una gran herramienta para acceder a MySQL pero establecer la conexión con el servidor es con diferencia el paso más complicado. Entre bugs de una y otra parte, mejoras que han ido llegando poco a poco, opciones por defecto poco razonables, servidores con configuraciones peculiares... hay que acordarse de fijar tantas opciones que es imposible recordarlo. Ésta es mi chuleta.

/* * Ejemplo de conexión a MySQL mediante PDO; personalícese a gusto del consumidor - v2013-03-22 */ define('BD_SERVIDOR', 'localhost'); define('BD_BASE_DE_DATOS', 'test'); define('BD_USUARIO', 'test'); define('BD_CONTRASENA', 'test'); define('BD_CODIFICACION', 'utf8'); $dsn = 'mysql:host=' . BD_SERVIDOR . ';dbname=' . BD_BASE_DE_DATOS; $opciones = array(     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,     PDO::ATTR_EMULATE_PREPARES => false,     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,     PDO::ATTR_AUTOCOMMIT => true, // Sólo hay transacción si la iniciamos explícitamente     // Debemos habilitar buffered queries si el servidor muestra este error:     //     // SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active.     // Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql,     // you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.     #PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true, ); /* * Cómo establecer el juego de caracteres de la conexión depende de la versión de PHP. * Los métodos preferidos son: * * 1. Parámetro charset en el DSN * 2. Opción PDO::MYSQL_ATTR_INIT_COMMAND * 3. Ejecutar SET NAMES utf8 directamente */ if( version_compare(PHP_VERSION, '5.3.6', '<') ){     if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){         $opciones[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . BD_CODIFICACION;     } }else{     $dsn .= ';charset=' . BD_CODIFICACION; } try{     $conexion = @new PDO($dsn, BD_USUARIO, BD_CONTRASENA, $opciones);     if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){         $sql = 'SET NAMES ' . BD_CODIFICACION;         $conexion->exec($sql);     }     /*      * Modo estricto - http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_traditional      */     $sql = "SET @@SESSION.sql_mode='TRADITIONAL'";     $conexion->exec($sql); }catch(PDOException $e){     // Aquí deberemos manejar la situación de forma que se integre con la gestión de errores del sitio     // ¡No es recomendable usar die() ni mostrar el error al usuario!     die('Se ha producido un error al establecer la conexión a la base de datos: ' . $e->getMessage()); }

Recuerda: ¡esto sólo es una plantilla! Personalízala según tus necesidades antes de utilizarla (posiblemente en el constructor de una clase que herede de PDO).

Esta página ha sido impresa el sábado 23 de septiembre de 2017 (02:22:06 +0200) desde http://borrame.com/recortes/php/pdo-mysql.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2017 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com