Clase PHP MySQL simple y fácil de usar (recomendada!)

by
on August 1, 2013
(1 minute read)

Ejecutar consultas SQL con PHP es muy fácil aunque para los que acaban de empezar puede ser un poco desesperante encontrar un código corto y simple que funcione y que devuelva algo cómodo de usar y coherente. En Internet se encuentran muchos snippets (trozos de código) que puedes copiar y pegar aunque muchos de ellos o son demasiado complicados, o funcionan mal, o son larguísimos con más de 50 lineas de código PHP.

Aquí os dejo la función que utilizo para proyectos pequeños en los que no necesito un framework PHP (normalmente prototipos rápidos y proyectos personales) o cuando utilizo micro-frameworks que no tienen librería de conexión a MySQL (como Lemonade). Os la dejo en una simple función aunque fácilmente se puede incorporar a una clase PHP para utilizar como método. Además, utiliza el método MySQLi que es la nueva versión que se recomienda.

Este es todo el código que necesitamos! En la primera línea iniciamos una conexión y luego creamos la función:

$c = mysqli_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE);

function db ($sql, $c) {
    $res = false;
	$q = ($c === null)[email protected]_query($sql):@mysqli_query($c,$sql);

	if($q) {
		if(strpos(strtolower($sql),'select') === 0) {
			$res = array();
			while($r = mysqli_fetch_assoc($q)) {
				$res[] = $r;
			}
		} else {
			$res = ($c === null)?mysqli_affected_rows():mysqli_affected_rows($c);
		}
	}
	return $res;
}

No necesitamos nada más :)

Ejemplos de uso

Como vemos más arriba, lo primero que necesitamos hacer es iniciar la conexión:

$c = mysqli_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE);

Y ahora podemos correr cualquier consulta SQL (recuerda añadir la $c en el segundo parámetro de la función!):

$resultado = db('SELECT * FROM tabla', $c);

Devuelve una matriz asociativa muy fácil de acceder:

echo $resultado[0]['nombre'];

Si queremos recorrer la matriz:

foreach ($resultado as $fila) {
	echo $fila['nombre'].'<br>';
}

Manejo de errores

Things I’m buying on Amazon this week

Si la consulta SQL no devuelve ningún resultado o hay un error de MySQL la función devolverá un booleano falso. Es tan fácil como comprobarlo con PHP así:

if (!db('SELECT * FROM table WHERE 1 == 0') {
	echo 'Error!';
}

Foto por camknows

Buscas ideas para un regalo? TrendLiker.com tiene centenares de artículos y te envía un email cuando bajan de precio en Amazon para comprar barato.

¿Te ha gustado este artículo?

Invítame a un café ☕

5 comments

  • bgkarl says:

    Gracias Xavi va de maravilla con la vercion 6.1.3, eres un campeon.

  • Jordi Rizo says:

    Buenas Xavi!!

    Qué diferencia habría entre usar mysqli_fetch_array o un while y mysqli_fetch_assoc?

    Gracias y espero hablar contigo pronto, tengo muchas cosas que contarte,

    Saludos!!

  • Xavi Author says:

    Hola Jordi!
    Que tal todo? Te envio un email :)
    Contestando a tu pregunta, mysql_fetch_assoc($q); es lo mismo que mysql_fetch_array($q, MYSQL_ASSOC);. Si no ponemos lo de MYSQL_ASSOC la array nos la devolvera numerica ($res[1]) en vez de asociativa ($res['foo']). En cuanto a rendimiento/velocidad la diferencia es minuscula aunque a efectos practicos es mejor trabajar con asociativas, mas claras de entender y faciles de debugar.
    Un abrazo!

  • raul says:

    Hola Que tal… me ha sido de gran utilidad! y agregándole:
    mysqli_set_charset($c, "utf8");
    antes de la funcion me solucioné problemas con las eñes y acentos

Follow me for cool new products and interesting findings on graphic design, web development, marketing, startups, life and humor.


/*Twitter*/ !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs"); /*Facebook (function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) {return;}js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1&appId=28624667607";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));*/ /*Google+*/ window.___gcfg = {lang: 'en-GB'};(function() {var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;po.src = 'https://apis.google.com/js/plusone.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);})();
Airbnb 25€ discount