$wpdb: ¿qué devuelve si falla?

2 minutos de lectura

avatar de usuario
Barbilla

No estoy seguro de si esta pregunta es específica de WordPress o está más relacionada con mySQL. Estoy tratando de averiguar qué se devolvería si falla la transacción con la base de datos. En el siguiente escenario, estoy actualizando una fila. Si no se cambia ninguno de los valores, se devuelve falso. Si los cambios se hacen verdaderos se devuelve. ¿Cómo puedo saber si la transacción ha fallado?

$result = $wpdb->update($this->table_name, $dbfields, $where);
if($result == false)//do fail - this is not really a fail!
if($result == true)//do success

Cualquier sugerencia apreciada.

echa un vistazo wp-includes\wp-db.php. Los comentarios del encabezado de la función de actualización de wpdb dicen:

 * @return int|false The number of rows updated, or false on error.

Entonces, sospecho que quieres encontrar la diferencia entre false (un valor booleano que indica una falla) y 0 (un número entero que indica que no se devolvieron filas).

Si comparas usando ==, false y 0 son iguales. Por lo tanto, debe utilizar el === operador para verificar si está tratando con el booleano false o el entero 0.

Entonces, prueba estos:

if ($result === false) // Fail -- the "===" operator compares type as well as value
if ($result === 0) // Success, but no rows were updated
if ($result > 0) // Success, and updates were done. $result is the number of affected rows.

Ver el manual de PHP para obtener más información sobre el operador de comparación ===.

  • ¿Hay alguna manera de que podamos obtener más información sobre la causa de la falla, la descripción del error?

    – Rafał Sroka

    1 de julio de 2015 a las 12:02

  • @Bearwithit Intenta comprobar $wpdb->last_error. Esa es una variable pública (cadena) que debería tener una descripción del último error.

    –Matt Gibson

    1 de julio de 2015 a las 12:58

  • Intentaré eso. ¡Gracias!

    – Rafał Sroka

    1 de julio de 2015 a las 13:17

  • ¡Muchas gracias!

    – Tranvía Azul

    18 de marzo de 2019 a las 5:59

¿Ha sido útil esta solución?