✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Un trozo para trabajar con consultas de bases de datos en WordPress

59

Por mucho que sea un fanático de ciertas API de WordPress para consultar la base de datos, como:

También soy fanático de consultar directamente en la base de datos cuando sea necesario.

Como notará, hay una manera consistente en la que hago esto y dado que hay momentos en los que lo he estado haciendo con más frecuencia, últimamente, aquí hay un formato básico para trabajar con consultas de bases de datos en WordPress.

Sin embargo, si hago esto, generalmente hay cosas que tengo en cuenta:

  1. siempre asegúrese de que la consulta esté parametrizada (especialmente en el caso de la entrada del usuario),
  2. devolver la información en forma de matriz asociativa.

El primer caso es por seguridad; el segundo es más o menos por conveniencia para simplificar la iteración a través de los datos a través de las funciones de matriz de PHP.

Consultas de base de datos en WordPress

Primero, es importante entender dos conceptos:

  1. parametrización,
  2. matriz_columna

Estos son el núcleo de cómo hago para escribir mis consultas y trabajar con los resultados de las mismas.

1 Parametrización

Puede leer más sobre esto en el Codex, pero la parametrización es una forma en que podemos escribir consultas que funcionan para evitar la inyección de SQL.

De la página del Codex :

Todos los datos en las consultas SQL deben tener escape SQL antes de que se ejecute la consulta SQL para evitar ataques de inyección SQL. El preparemétodo realiza esta funcionalidad para WordPress, que admite una sintaxis similar a sprintf() y vsprintf().

Es decir, el método admite tokens como %s, %d y %f al pasar información a la consulta. Mostraré un ejemplo de esto más adelante en la publicación.

2 Trabajar con columnas de matriz

Los resultados de tales consultas se pueden devolver de varias maneras diferentes. Es decir, como un objeto, una matriz indexada numéricamente o una matriz asociativa. La mayoría de las veces, me gusta usar arreglos (y mostraré cómo hacerlo en WordPress más adelante en esta publicación).

Un trozo para trabajar con consultas de bases de datos en WordPress

Sin embargo, la razón es que puedo aprovechar array_column. Del manual de PHP:

array_column() devuelve los valores de una sola columna de la entrada, identificada por column_key. Opcionalmente, se puede proporcionar una clave_índice para indexar los valores en la matriz devuelta por los valores de la columna clave_índice de la matriz de entrada.

Esto significa que si tiene una matriz y tiene un montón de resultados, cada uno de los cuales tiene la misma columna, puede simplificar fácilmente la información pasando la matriz a un método y luego pasando el nombre de la columna a un método.

¿El resultado? Una matriz indexada numéricamente de los valores. Esto hace que sea mucho más fácil iterar a través de los datos a través de array_map, usando for o foreach.

Un trozo para consultar la base de datos

Con esa lógica en su lugar, aquí está el código auxiliar que normalmente uso cada vez que trabajo directamente con consultas de base de datos:

<?php
global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        ",
        $userId
    ),
    ARRAY_A
);

if (empty($results)) {
  return;
}
$results = array_map($results, 'column_name');

Y aquí hay un ejemplo con un par de datos diferentes para que puedas ver cómo funciona :

<?php
global $wpdb;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "
        SELECT
            user_id,
            meta_value
        FROM $wpdb->usermeta
        WHERE meta_key LIKE %s
        AND user_id = %d
        ",
        '%wc_authorize_net_cim_customer_profile_id%',
        wp_get_current_user()->ID;
    ),
    ARRAY_A
);

if (empty($results)) {
    return [];
}
$results = array_map($results, 'meta_value');

Consultar la tabla wp_user_meta puede parecer una tontería ya que get_user_meta es una función de API válida, pero pensé que sería una consulta fácil de entender dado lo que estoy tratando de explicar en el pasado.

De todos modos, no puedo proporcionar la consulta ni puedo manejar el caso en que los resultados pueden regresar con varias columnas (en ese caso, tendrá que trabajar con algo diferente a array_map, pero eso debería ser bastante fácil, ¿verdad? )

Fuente de grabación: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More