Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

831
Vistas
Wordpress $wpdb->get_results devuelve una matriz vacía pero phpMyAdmin devuelve varias filas. ¿Por qué?

El código de mi complemento de WordPress se ve así:

 $table = $wpdb->prefix."cf_form_entry_values"; $where = "entry_id = ".$entryid; $select = "SELECT id FROM {$table} WHERE {$where}"; $query = $wpdb->prepare( $select ); $result = $wpdb->get_results( $query );

Produce la siguiente consulta mysql: SELECCIONE id DE wpqs_cf_form_entry_values DONDE entry_id = 49

WordPress devuelve una matriz vacía. No se informaron errores de SQL (tengo show_errors() configurado), var_dump está vacío. Pero si corto y pego esa consulta en phpMyAdmin, devuelve las filas esperadas. No entiendo por qué WordPress me da resultados vacíos. También probé SELECCIONAR * DESDE wpqs_cf_form_entry_values DONDE entry_id = 49

He notado que si elimino la cláusula WHERE, WordPress está feliz de devolverme la tabla completa, pero ¿por qué no puedo filtrarla con una cláusula WHERE?

MÁS INFORMACIÓN TRAS PRUEBAS ADICIONALES... Es curioso lo que funciona y lo que no.

Estas dos consultas no funcionan:

 SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 55 AND slug = 'photo' SELECT * FROM wpqs_cf_form_entry_values WHERE entry_id = 55

Pero este lo hace:

 SELECT * FROM wpqs_cf_form_entry_values WHERE slug = 'photo'

He intentado poner el valor de entry_id entre comillas y sin ellas. ¿Esa información adicional ayuda a alguien?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¿Podría intentar agregar este código?

 $wpdb->show_errors( true )

Tal vez luego muestre alguna información sobre por qué no funciona. ¿Intentó escribir sin variables de PHP, como una cadena completa?

También intente poner la tabla en qoutes

 SELECT * FROM `wpqs_cf_form_entry_values`

También he notado que falta entry_id en SELECT. Deberías tenerlo así:

 SELECT id,entry_id FROM `wpqs_cf_form_entry_values`

También intente poner en la parte superior del archivo

 global $wpdb
over 4 years ago · Santiago Trujillo Denunciar

0

$where = "entry_id = ".$entryid; Supongo que $entryid debería estar envuelto en ''

over 4 years ago · Santiago Trujillo Denunciar

0

La declaración de selección no se configura correctamente para el wpdb->prepare() .

$wpdb->prepare() necesita 2 argumentos. 1) la declaración de selección 2) los valores que son variables en la declaración.

  1. La declaración de selección debe crearse con "formato sprintf" de la siguiente manera:

Donde el valor es un dígito:

 "select * from table where id = %d";

Donde valor es una cadena:

 "select * from table where name = %s";

Donde el valor es un "flotante":

 "select * from table where id = %f";

Donde el valor es una mezcla (cualquier número o mezcla es posible):

 "select * from table where id = %d OR name = %s OR price = %f";

%d , %s , %f son los únicos 3 valores que deben ir en una instrucción de selección que se enviará a wpdb->prepare()

En su caso, ASUMIENDO que entry_id es un número entero, la declaración debe crearse de la siguiente manera:

 $table = $wpdb->prefix."cf_form_entry_values"; $where = "entry_id = %d"; $select = "SELECT id FROM $table WHERE $where";

El segundo parámetro es el valor o valores para reemplazar los "formatos sprintf". Estos deben estar en el orden en que aparecen en la declaración de selección. En su caso, el único valor es $entryid . Paso estos valores en una matriz, pero se pueden pasar individualmente. En su caso, pasaría la instrucción select y el $entryid de la siguiente manera:

 $prepared_statement = $wpdb->prepare( $select,[$entryid] ); $results = $wpdb->get_results($prepared_statement);

Tenga en cuenta que he cambiado su variable $result a $results ya que $wpdb->get_results() es para devolver varias filas. Si espera una sola fila, es mejor usar $wpdb->get_row() con su declaración preparada.

MÁS INFORMACIÓN:https://developer.wordpress.org/reference/classes/wpdb/prepare/

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda