Index: src/wp-includes/meta.php
===================================================================
--- src/wp-includes/meta.php	(revision 25555)
+++ src/wp-includes/meta.php	(working copy)
@@ -151,7 +151,9 @@
 	if ( 'post' == $meta_type )
 		do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
 
-	$wpdb->update( $table, $data, $where );
+	$result = $wpdb->update( $table, $data, $where );
+	if ( ! $result )
+		return false;
 
 	wp_cache_delete($object_id, $meta_type . '_meta');
 
@@ -435,7 +437,9 @@
 			do_action( 'update_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
 
 		// Run the update query, all fields in $data are %s, $where is a %d.
-		$result = (bool) $wpdb->update( $table, $data, $where, '%s', '%d' );
+		$result = $wpdb->update( $table, $data, $where, '%s', '%d' );
+		if ( ! $result )
+			return false;
 
 		// Clear the caches.
 		wp_cache_delete($object_id, $meta_type . '_meta');
@@ -445,7 +449,7 @@
 		if ( 'post' == $meta_type )
 			do_action( 'updated_postmeta', $meta_id, $object_id, $meta_key, $meta_value );
 
-		return $result;
+		return true;
 	}
 
 	// And if the meta was not found.
Index: src/wp-includes/option.php
===================================================================
--- src/wp-includes/option.php	(revision 25555)
+++ src/wp-includes/option.php	(working copy)
@@ -234,6 +234,13 @@
 	if ( false === $oldvalue )
 		return add_option( $option, $newvalue );
 
+	$_newvalue = $newvalue;
+	$newvalue = maybe_serialize( $newvalue );
+
+	$result = $wpdb->update( $wpdb->options, array( 'option_value' => $newvalue ), array( 'option_name' => $option ) );
+	if ( ! $result )
+		return false;
+
 	$notoptions = wp_cache_get( 'notoptions', 'options' );
 	if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
 		unset( $notoptions[$option] );
@@ -240,9 +247,6 @@
 		wp_cache_set( 'notoptions', $notoptions, 'options' );
 	}
 
-	$_newvalue = $newvalue;
-	$newvalue = maybe_serialize( $newvalue );
-
 	do_action( 'update_option', $option, $oldvalue, $_newvalue );
 	if ( ! defined( 'WP_INSTALLING' ) ) {
 		$alloptions = wp_load_alloptions();
@@ -254,14 +258,9 @@
 		}
 	}
 
-	$result = $wpdb->update( $wpdb->options, array( 'option_value' => $newvalue ), array( 'option_name' => $option ) );
-
-	if ( $result ) {
-		do_action( "update_option_{$option}", $oldvalue, $_newvalue );
-		do_action( 'updated_option', $option, $oldvalue, $_newvalue );
-		return true;
-	}
-	return false;
+	do_action( "update_option_{$option}", $oldvalue, $_newvalue );
+	do_action( 'updated_option', $option, $oldvalue, $_newvalue );
+	return true;
 }
 
 /**
@@ -312,17 +311,21 @@
 		if ( false !== get_option( $option ) )
 			return false;
 
-	$_value = $value;
-	$value = maybe_serialize( $value );
+	$_value = maybe_serialize( $value );
 	$autoload = ( 'no' === $autoload ) ? 'no' : 'yes';
-	do_action( 'add_option', $option, $_value );
+	do_action( 'add_option', $option, $value );
+
+	$result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $_value, $autoload ) );
+	if ( ! $result )
+		return false;
+
 	if ( ! defined( 'WP_INSTALLING' ) ) {
 		if ( 'yes' == $autoload ) {
 			$alloptions = wp_load_alloptions();
-			$alloptions[$option] = $value;
+			$alloptions[$option] = $_value;
 			wp_cache_set( 'alloptions', $alloptions, 'options' );
 		} else {
-			wp_cache_set( $option, $value, 'options' );
+			wp_cache_set( $option, $_value, 'options' );
 		}
 	}
 
@@ -333,14 +336,9 @@
 		wp_cache_set( 'notoptions', $notoptions, 'options' );
 	}
 
-	$result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $value, $autoload ) );
-
-	if ( $result ) {
-		do_action( "add_option_{$option}", $option, $_value );
-		do_action( 'added_option', $option, $_value );
-		return true;
-	}
-	return false;
+	do_action( "add_option_{$option}", $option, $value );
+	do_action( 'added_option', $option, $value );
+	return true;
 }
 
 /**
@@ -829,13 +827,14 @@
 
 		$value = sanitize_option( $option, $value );
 
+		$_value = maybe_serialize( $value );
+		$result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $_value ) );
+
+		if ( ! $result )
+			return false;
+
 		wp_cache_set( $cache_key, $value, 'site-options' );
 
-		$_value = $value;
-		$value = maybe_serialize( $value );
-		$result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $value ) );
-		$value = $_value;
-
 		// This option exists now
 		$notoptions = wp_cache_get( 'notoptions', 'site-options' ); // yes, again... we need it to be fresh
 		if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
@@ -934,13 +933,14 @@
 		$result = update_option( $option, $value );
 	} else {
 		$value = sanitize_option( $option, $value );
-		$cache_key = "{$wpdb->siteid}:$option";
-		wp_cache_set( $cache_key, $value, 'site-options' );
 
-		$_value = $value;
-		$value = maybe_serialize( $value );
-		$result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) );
-		$value = $_value;
+		$_value = maybe_serialize( $value );
+		$result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $_value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) );
+
+		if ( $result ) {
+			$cache_key = "{$wpdb->siteid}:$option";
+			wp_cache_set( $cache_key, $value, 'site-options' );
+		}
 	}
 
 	if ( $result ) {
