2011-06-30 30 views
11

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á 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 punteros apreciados.

Respuesta

32

Echa un vistazo a wp-includes\wp-db.php. Los comentarios de cabecera de la función de actualización de wpdb dice:

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

Por lo tanto, yo sospecho que usted quiere encontrar la diferencia entre false (un valor booleano que indica un fallo) y 0 (un entero que indica que se devuelve ninguna fila .)

Si compara usando ==, false y 0 son iguales. Por lo tanto, debe utilizar el operador === para comprobar si se trata del booleano false o el número entero 0.

lo tanto, tratar los siguientes:

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 the PHP manual para más información sobre el operador de comparación ===.

+0

muy buena respuesta. Gracias – wordpresrox

+0

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

+0

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