Tecnología y Coaching para Emprendedores

¿Aún sigues usando la vieja API de mysql?

mysql

Una de las cosas básicas y geniales de PHP es la conexión con una base de datos. Desde PHP se puede interactuar con ella: Añadir datos, obtenerlos, etc, pero:
¿Qué metodo usas para conectar con ella?. Seguramente, en un 90% de los casos, tu base de datos es MySQL. Si sabes de PHP, pero no estás muy al día, es posible que aún sigas usando la vieja API de MySQL:

$conexion = mysql_connect($host, $usuario, $contrasena);
mysql_select_db($database, $conexion);
// mysql_query...

Pues lo cierto es que no deberías usarla. Por dos razones:

  1. Está oficialmente desaconsejado por PHP, a pesar de que otras páginas famosas como w3schools (w3fools) siguen sin actualizar su documentación.
  2. No es tan segura como la alternativa. Sanear los argumentos con la vieja API es muy complicado. Con PDO, es pan comido.

La alternativa: PDO

PDO (PHP Database Object) es un módulo para conectarse a la base de datos de una forma orientada a objetos. Tiene ciertas funciones que son geniales para asegurarse de que los datos sean del tipo esperado, es más reutilizable (al fin y al cabo en eso consiste la programación orientada a objetos), y tiene un largo set de ventajas sobre mysql. Este es un ejemplo básico:

// Hay más módulos de PDO, así que tendremos que decir que es mysql
$pdo = new PDO("mysql:host=$host;dbname=$database", $usuario, $contrasena);
// Para usar una simple consulta:
$pdo->query("UPDATE TABLE `usuarios` SET `nombre` = 'Antonio' WHERE `ID` = 1");
// Ejemplo: Crear función para obtener los datos de un usuario concreto
// Normalmente querríamos tener nuestra caché, nuestra comprobación de errores, etc, pero...
function selectPost($id) {
	global $pdo;
	// tenemos una declaración (PDOstatement)
	$stmt = $pdo->prepare("SELECT * FROM `usuarios` WHERE `ID` = :id");

	// Aquí le decimos la pdo que queremos sustituir en la consulta :id por la ID, y que lo sanee para ser un integer
	$stmt->bindParam(':id', $id, PDO::PARAM_INT);
	$stmt->execute();
	// Esto sólo nos devolverá la primera fila (genial si queremos sólo un valor)
	// Si queremos varios, en vez de usar mysql_fetch_array, usamos $stmt->fetchAll();
	// Que nos devuelve una array para hacer lo que queramos con ella

	$usuario = $stmt->fetch();

	return $usuario;
}

Conclusión

Deberías de actualizar tu código antguo para usar PDO, porque más pronto que tarde la API de MySQL dejará de funcionar, y por que le da un punto más de seguridad.
Si no lo conocías, te recomiendo el manual completo donde podrás empezar a usarla, y a descubrir funcionalidades avanzadas de la PDO. Sinceramente, las ventajas de usarla son muchas.


Comentarios

  • tom

    lool, hay fecha para que la anterior forma deje de estar operativa? tengo un par de páginas que me podrian cascar si eso pasa >_<

    hace 1 año que no toco el diseño web, la verdad termine frito del ultimo proyecto, y ando algo retrasado respecto estos temás, intentaré mirar el manual completo, un saludo y gracias por la información.

  • Emilio Cobos Álvarez

    Probablemente con la salida de la próxima versión de PHP, aunque es posible que lo mantengan justamente por eso, por que es un código utilizado muy ampliamente.

    De todas las maneras, lo mantengan o no, yo recomendaría actualizarlo, aunque sólo sea por seguridad.

  • Almogàver

    El articulo muy interesante!!

    Pero podrias corregir los errores de tipo -> " . ;)

    • Sandra

      Hecho! El editor de WordPress que a la mínima que corriges algo lo desconfigura todo. Gracias por avisar!