¿Por qué WordPress $wpdb->query() responde 1 cuando las filas devueltas son 0?

1 minuto de lectura

Estoy haciendo lo siguiente en una función personalizada:

    $exists = $wpdb->query($wpdb->prepare('
    SELECT COUNT(*)
    FROM wp_%d_gdsr_data_article
    WHERE post_id = %d

', $blog_id, $post_id));

$exists se evalúa como 1 incluso si la consulta no devuelve filas. Además, var_dump($wpdb->queries) produce un NULL. Alguien sabe lo que está pasando aquí?

Gracias,

avatar de usuario
thetaiko

Desde el documentación:

La función devuelve un número entero correspondiente al número de filas afectadas/seleccionadas. Si hay un error de MySQL, la función devolverá FALSO. (Nota: dado que se pueden devolver 0 y FALSO, asegúrese de utilizar el operador de comparación correcto: igualdad == vs. identidad ===).

La consulta devuelve 1 fila por lo que el query() función devuelve 1 – y siempre volveré 1 para la consulta que publica en su pregunta, incluso si el número de filas seleccionadas por el COUNT es 0. Uso get_var, get_rowo get_results como lo sugiere TheDeadMedic para obtener el resultado real de la consulta, que podría ser 0, 1, 2etc.

Usar $wpdb->get_var($query) en cambio.

En consecuencia, utilice $wpdb->get_row() para recuperar una sola fila como un solo objeto (o matriz), y $wpdb->get_results() para obtener un conjunto de resultados.

  • Gracias, pero ¿por qué devolvería 1 cuando se supone que debe devolver un recuento de filas? También alguna idea de por qué $wpdb->queries está vacío?

    – código vaquero

    7 de junio de 2010 a las 13:35


  • $wpdb->query() solo debe usarse para consultas ejecutables, ya que solo devuelve el número de filas o falso si no hay filas. $wpdb->queries solo se utiliza si define SAVEQUERIES como verdadero

    – El médico muerto

    7 de junio de 2010 a las 13:51

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad