Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

818
Views
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 answers
Answer question

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 Report

0

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

over 4 years ago · Santiago Trujillo Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!