Muchos de nosotros solemos utilizar WordPress como una base segura para un sistema de usuarios y administracion de un sitio web. Muchas veces me ha tocado programar por sobre el WP base y modificarlo a gusto de mis clientes, pero al utilizar instrucciones o llamadas SQL independientes me he llegado a encontrar que interrumpen la correcta ejecucion de las llamadas de WP.
Es asi como investigando descubri que mientras se tuviera el mismo par usuario/clave que la base de datos de WP para acceder a la otra base de datos, era posible utilizar la notacion completa basededatos.tabla con el objeto global $wpdb.
Aqui les dejo un ejemplo simple, que en este caso estaria dentro de una plantilla de WordPress.
<?php
/**
* @package WordPress
* @subpackage Mi Tema de Prueba
*/
/*
Template Name: Probando $wpdb
*/
?>
<table width='600'>
<?php get_header; ?>
<?php
global $wpdb; // declaramos la global
$resultados = $wpdb->get_results("SELECT * FROM otrabd.mitabla");
$cuantos = $wpdb->num_rows;
foreach ($resultados as $datos)
{
echo '<tr>';
echo '<td>$datos->nombre</td>';
echo '<td>$datos->apellido</td>';
echo'</tr>';
}
?>
</table>
<?php echo 'Se han encontrado: '.$cuantos.' resultados.';
<?php get_footer; ?>
Aqui podemos ver que primero llamamos a la global $wpdb, luego utilizamos la propiedad get_results del objeto para obtener los resultados de nuestra consulta. En caso de que fuera necesario incluir variables externas (POST o GET) en nuestra consulta, es recomendable utilizar la propiedad prepare del objeto $wpdb.
De la siguiente forma:
<?php
global $wpdb;
$query = $wpdb->prepare("SELECT * FROM otrabd.mitabla WHERE nombre='%s' and apellido='%d'", $_GET[nombre], $_GET[apellido]);
$resultados = $wpdb->get_results($query);
?>
Aqui vemos como la propiedad prepare recibe dos argumentos, el primero es la consulta que deseamos realizar, con las variables identificadas como %s y %d, y luego un segundo y tercer parametro que son (en orden) las variables que luego seran reemplazadas en %s y %d respectivamente. Como metodo opcional se puede pasar como segundo argumento un array con las variables (en caso de que nuestra consulta tuviera muchas variables externas a filtrar con prepare).
De este modo:
<?php
global $wpdb;
$filtrar[] = $_GET[nombre];
$filtrar[] = $_GET[apellido];
$query = $wpdb->prepare("SELECT * FROM otrabd.mitabla WHERE nombre='%s' and apellido='%d'", $filtrar);
$resultados = $wpdb->get_results($query);
?>
Otras propiedades que les pueden ser de utilidad son $wpdb->query (para instrucciones de insertar, borrar,etc.) y $wpdb->num_rows (usada en el primer ejemplo, que devuelve la cantidad de filas afectadas en la ultima consulta).
Cabe destacar que tanto $wpdb->query como $wpdb->get_results pueden devolver los resultados como un array asociativo, un array numerico o un objeto (por defecto), llamando su segundo parametro como ARRAY_A o ARRAY_N respectivamente.
Por ejemplo:
<?php
global $wpdb;
$filtrar[] = $_GET[nombre];
$filtrar[] = $_GET[apellido];
$query = $wpdb->prepare("SELECT * FROM otrabd.mitabla WHERE nombre='%s' and apellido='%d'", $filtrar);
$resultados = $wpdb->get_results($query, ARRAY_A);
echo $resultados[nombre];
echo $resultados[apellido];
?>
Espero les haya servido este articulo, pueden encontrar más información aqui (En ingles):




