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)?@mysqli_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
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
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 unwhile
ymysqli_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 quemysql_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
lucas Cordero says:
Muy Buena Xavi !!!
$con = mysqli_connect($db_host, $db_user, $db_pass, $db_name);
mysqli_set_charset($con, “utf8”);
me soluciono todo de los acentos y eñes !!!