diff --git src/wp-includes/meta.php src/wp-includes/meta.php
index 8833d3e..5a2ac57 100644
--- src/wp-includes/meta.php
+++ src/wp-includes/meta.php
@@ -571,8 +571,8 @@ function get_metadata_by_mid( $meta_type, $meta_id ) {
 		return false;
 	}
 
-	$meta_id = absint( $meta_id );
-	if ( ! $meta_id ) {
+	$meta_id = intval( $meta_id );
+	if ( $meta_id <= 0 ) {
 		return false;
 	}
 
@@ -615,8 +615,8 @@ function update_metadata_by_mid( $meta_type, $meta_id, $meta_value, $meta_key =
 		return false;
 	}
 
-	$meta_id = absint( $meta_id );
-	if ( ! $meta_id ) {
+	$meta_id = intval( $meta_id );
+	if ( $meta_id <= 0 ) {
 		return false;
 	}
 
@@ -706,8 +706,8 @@ function delete_metadata_by_mid( $meta_type, $meta_id ) {
 		return false;
 	}
 
-	$meta_id = absint( $meta_id );
-	if ( ! $meta_id ) {
+	$meta_id = intval( $meta_id );
+	if ( $meta_id <= 0 ) {
 		return false;
 	}
 
diff --git tests/phpunit/tests/meta.php tests/phpunit/tests/meta.php
index 0676c7e..b7d7ea2 100644
--- tests/phpunit/tests/meta.php
+++ tests/phpunit/tests/meta.php
@@ -293,6 +293,18 @@ class Tests_Meta extends WP_UnitTestCase {
 	}
 
 	/**
+	 * @ticket 37746
+	 */
+	function test_negative_meta_id() {
+		$negative_mid = $this->meta_id * -1;
+
+		$this->assertTrue( $negative_mid < 0 );
+		$this->assertFalse( get_metadata_by_mid( 'user', $negative_mid ) );
+		$this->assertFalse( update_metadata_by_mid( 'user', $negative_mid, 'meta_new_value' ) );
+		$this->assertFalse( delete_metadata_by_mid( 'user', $negative_mid ) );
+	}
+
+	/**
 	 * @ticket 15030
 	 */
 	public function test_get_metadata_with_empty_key_array_value() {
