SELECT – Cómo leer datos en WordPress usando la clase wpdb?

- noviembre 09, 2022

En este post analizaremos las diferentes maneras de obtener datos con la clase wpdb de WordPress y la clausuala SELECT de SQL.
Antes de comenzar me gustaría definir las principales partes de una base de datos tomando como ejemplo un documento de Google spreadsheets:

  • File = Database (Base de datos)
  • Sheet = Table (Tabla)
  • Column = Column (Columna)
  • Row = Row (Fila)
  • Cell = Cell* (Celda)
SELECT table

La anterior imagen nos muestra los principales elementos con los que se pueden interactuar en una base de datos SQL, siendo File el cual esta marcado en rojo toda nuestra base de datos la cual almacenará tablas y las demás partes que se pueden observar en la imagen.

Así luciría un documento de Google spreadsheets con información real, que básicamente esta se comporta como una base de datos, asumiremos que el nombre de nuestra tabla dentro de la base de datos sera wp_contact_form.

base de datos

Table wp_contact_form:

 

Y así luciría nuestra base de datos SQL con la misma información, exactamente igual que la anterior con columnas, filas, tablas, etc.

base de datos phpmyadmin

Table wp_contact_form phpmyadmin

Cómo realizar una consulta a una base de datos SQL?

Ahora bien, recordemos como realizar una consulta con SQL ya que esta sigue siendo una base de datos de dicho tipo, por ejemplo si queremos obtener solamente los datos de name y message cuando el name sea Jose podemos ejecutar lo siguiente:

SELECT name, message 
FROM `wp_contact_form` 
WHERE name = 'Andres';

 

El resultado que obtendremos sera el siguiente:

resultado query sql

Table wp_contact_form:

Principales métodos para leer u obtener datos desde una tabla con wpdb

Como lo mencionamos en nuestro post de introducción a la clase wpdb este contiene métodos muy utiles para interactuar con la base de datos de WordPress, incluyendo la ejecución de comandos SQL como el que acabamos de ver.

Los siguientes son 4 de los principales métodos para leer u obtener información desde nuestra base de datos, estos serán detallados a continuación.

  • get_var()
  • get_row()
  • get_col()
  • get_results()
descripcion tabla

SELECT get_var() – Una variable

La función get_var devuelve una sola variable de la base de datos. Aunque solo devuelve una variable, el resultado completo de la consulta se almacena en caché para su uso posterior. Devuelve NULL si no se encuentra ningún resultado.

Ejemplo de SELECT con get_var() obteniendo el valor de name cuando el id es 1.

global $wpdb;

$name = $wpdb->get_var("
	SELECT `name` 
	FROM `wp_contact_form` 
	WHERE `id` = 1 
	");

echo $name;

//Resultado
"Andres Rodriguez"

 

Ejemplo de SELECT con get_var() obteniendo el numero de filas que existe en la tabla wp_contact_form.

global $wpdb;

$sum = $wpdb->get_var(
	"SELECT COUNT(*) 
	FROM `wp_contact_form`"
);

echo $sum;

//Resultado
4

Mirar toda la documentación del método get_var().

 

SELECT get_row() – Una fila

Para recuperar una fila completa de una consulta, se usa el método get_row. La función puede devolver la fila como un objeto, una matriz asociativa o como una matriz indexada numéricamente. Si la consulta devuelve más de una fila, la función solo devuelve la fila especificada, pero todas las filas se almacenan en caché para su uso posterior. Devuelve NULL si no se encuentra ningún resultado, considere esto cuando use el valor devuelto en los argumentos, vea el ejemplo a continuación.

Ejemplo de SELECT con get_row() obteniendo los todos los datos de la fila cuando el id es igual a 2

 

global $wpdb;

$user = $wpdb->get_row( "SELECT * FROM `wp_contact_form` WHERE id = 2" );
echo 'Id: '. $user->id .'';
echo 'Nombre: '. $user->name .'';
echo 'Email: '. $user->email .'';
echo 'Message: '. $user->message. '';

//Resultado
Id: 2
Nombre: Jose Perez
Email: [email protected]
Message: Sed porttitor lectus nibh. Curabitur aliquet quam id dui posuere blandit. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Cras ultricies ligula sed magna dictum porta. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a.

 

Ejemplo de SELECT con get_row() obteniendo los todos los datos de la fila cuando el id es igual a 2 pero ahora usando una matriz asociativa y obtenemos el mismo resultado, noten la diferencia que ahora utilizamos una matriz dentro de nuestros valores.

global $wpdb;

$user = $wpdb->get_row( "SELECT * FROM `wp_contact_form` WHERE id = 2", ARRAY_A );
echo 'Id: '. $user['id'] .'';
echo 'Nombre: '. $user['name'] .'';
echo 'Email: '. $user['email'] .'';
echo 'Message: '. $user['message'] . '';

//Resultado
Id: 2
Nombre: Jose Perez
Email: [email protected]
Message: Sed porttitor lectus nibh. Curabitur aliquet quam id dui posuere blandit. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Cras ultricies ligula sed magna dictum porta. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a.

 

Ejemplo de SELECT con get_row() obteniendo los todos los datos de la fila cuando el id es igual a 2 pero ahora usando una matriz numérica, nótese que al final de nuestra consulta utilizamos la palabra ARRAY_N para denotar nuestro tipo de array.

global $wpdb;

$user = $wpdb->get_row( "SELECT * FROM `wp_contact_form` WHERE id = 2", ARRAY_N );
echo 'Id: '. $user[0] .'';
echo 'Nombre: '. $user[1] .'';
echo 'Email: '. $user[2] .'';
echo 'Message: '. $user[3] . '';

//Resultado
Id: 2
Nombre: Jose Perez
Email: [email protected]
Message: Sed porttitor lectus nibh. Curabitur aliquet quam id dui posuere blandit. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Cras ultricies ligula sed magna dictum porta. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a.

Los anteriores ejemplo son diferentes caminos los cuales nos pueden llevar al mismo resultado, por que existen diferentes maneras? bueno, esto ya depende de tus necesidades, te invito a realizar un test de velocidad en cada consulta y verificar cual de estos es mas rápido al momento de manejar grandes cantidades de datos.

Mira toda la documentación del método get_row().

 

SELECT get_col() – Una columna

Para SELECCIONAR una columna, use el método get_col. Este método genera una matriz unidimensional. Si la consulta devuelve más de una columna, solo se devolverá la columna especificada, pero el resultado completo se almacena en caché para su uso posterior. Devuelve una matriz vacía si no se encuentra ningún resultado.

Ejemplo de SELECT con get_col() obteniendo los todos los datos de la columna name en la tabla wp_contact_form.

global $wpdb;

$names = $wpdb->get_col("SELECT name FROM `wp_contact_form`");
foreach($names as $name){
	echo $name . ', ';
}

//Resultado
"Andres Rodriguez, Jose Perez, Pedro Diaz, Juan Salazar"

Mira toda la documentación del método get_col().

 

SELECT get_results() – multiples filas

Los resultados genéricos de varias filas se pueden extraer de la base de datos con get_results(). El método devuelve el resultado completo de la consulta como una matriz. Cada elemento de esta matriz corresponde a una fila del resultado de la consulta y, como get_row, puede ser un objeto, una matriz asociativa o una matriz numerada. Si no se encuentran filas coincidentes o si hay un error en la base de datos, el valor de retorno será una matriz vacía. Si su $query cadena está vacía, o pasa un invalid $output_type, NULL se devolverá.

Este es el método más utilizado ya que esta abierto a realizar todo tipo de consultas.

Miremos algunos ejemplos:

Ejemplo de SELECT con get_results() obteniendo todos los datos de la tabla wp_contact_form.

 

global $wpdb;

$results = $wpdb->get_results(
	"SELECT * FROM `wp_contact_form`"
);

foreach ( $results as $result ) {
	echo $result->id .' - ';
	echo $result->name .' - ';
	echo $result->email .' - ';
	echo $result->message  . '
';
}

//Resultado
1 - Andres Rodriguez - [email protected] - Donec sollicitudin molestie malesuada. Nulla porttitor accumsan tincidunt.
2 - Jose Perez - [email protected] - Sed porttitor lectus nibh. Curabitur aliquet quam id dui posuere blandit. Quisque velit nisi, pretium ut lacinia in, elementum id enim. Cras ultricies ligula sed magna dictum porta. Mauris blandit aliquet elit, eget tincidunt nibh pulvinar a.
3 - Pedro Diaz - [email protected] - Curabitur arcu erat,
4 - Juan Salazar - [email protected] - Donec sollicitudin molestie malesuada. Nulla porttitor accumsan tincidunt.

Mira toda la documentación del método get_results().

Básicamente lo que se logra con get_results() es poder obtener cualquier dato que necesitemos de nuestra base de datos.

En el siguiente ejemplo vamos a obtener el ID y post_title de la tabla wp_posts cuando el status es publish y el post_type es post.

global $wpdb;

$posts = $wpdb->get_results(
	"SELECT ID, post_title
	FROM $wpdb->posts
	WHERE post_status = 'publish'
	AND post_type = 'post'
	"
);

foreach ( $posts as $post ) {
	echo $post->ID .' - ';
	echo $post->post_title;
}

// El resultado depende de tu base de datos pero en mi caso seria
"1 - Hello world!"

Te invito a probar todas estas anteriores consultas y decidir cual va mejor con tu proyecto, todas ellas ayudan hacer mas eficiente nuestros proyectos dependiendo de las necesidades, si bien get_results() lo podemos utilizar para todo tipo de consulta las demás vienen siendo de mucha importancia en ciertos casos de seguridad y performance en nuestra aplicación.

Cuéntame en los comentarios si te ha gustado este post y como te ha ayudado en tus proyectos.

En el proximo post hablare del método INSERT y como utilizarlos correctamente, los espero…


Recibirás cada semana todas nuestras actualizaciones
Puedes estar tranquilo que nunca te enviaremos SPAM
SOBRE EL AUTOR

#WordPress is the medium through which I express myself.

¿Tienes un proyecto en mente? Hagámoslo real

CONTACTAR
Ebook-eBook – Funciones más Útiles para WordPress

Descarga el eBook GRATIS!

eBook – Funciones más Útiles para WordPress