diff --git a/include/errmsg.h b/include/errmsg.h
index 6115b24a3d8009abd8ce701ccdb6576ebfba13f1..9697722766679340649e907cd7d68646a9165322 100644
--- a/include/errmsg.h
+++ b/include/errmsg.h
@@ -90,3 +90,4 @@ extern const char *client_errors[];	/* Error messages */
 #define CR_SECURE_AUTH                          2049
 #define CR_FETCH_CANCELED                       2050
 #define CR_NO_DATA                              2051
+#define CR_NO_STMT_METADATA                     2052
diff --git a/libmysql/errmsg.c b/libmysql/errmsg.c
index 710bf4ccd8d3171dc54e5d88302531fbb079cd02..5fa94e5ff0dbf284502b6c68d0a6d7dd6530215e 100644
--- a/libmysql/errmsg.c
+++ b/libmysql/errmsg.c
@@ -78,7 +78,9 @@ const char *client_errors[]=
   "Invalid connection handle",
   "Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
   "Row retrieval was canceled by mysql_stmt_close() call",
-  "Attempt to read column without prior row fetch"
+  "Attempt to read column without prior row fetch",
+  "Prepared statement contains no metadata",
+  ""
 };
 
 /* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
@@ -137,7 +139,9 @@ const char *client_errors[]=
   "Invalid connection handle",
   "Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
   "Row retrieval was canceled by mysql_stmt_close() call",
-  "Attempt to read column without prior row fetch"
+  "Attempt to read column without prior row fetch",
+  "Prepared statement contains no metadata",
+  ""
 };
 
 #else /* ENGLISH */
@@ -194,7 +198,9 @@ const char *client_errors[]=
   "Invalid connection handle",
   "Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)",
   "Row retrieval was canceled by mysql_stmt_close() call",
-  "Attempt to read column without prior row fetch"
+  "Attempt to read column without prior row fetch",
+  "Prepared statement contains no metadata",
+  ""
 };
 #endif
 
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 8989dc18fd77a7dda8822acf5e13ca77456f2381..a71e99a5642f1b0d6146d3ff4fda9a503232946a 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -2139,12 +2139,12 @@ static void update_stmt_fields(MYSQL_STMT *stmt)
   DESCRIPTION
     This function should be used after mysql_stmt_execute().
     You can safely check that prepared statement has a result set by calling
-    mysql_stmt_num_fields(): if number of fields is not zero, you can call
+    mysql_stmt_field_count(): if number of fields is not zero, you can call
     this function to get fields metadata.
     Next steps you may want to make:
     - find out number of columns in result set by calling
       mysql_num_fields(res) (the same value is returned by
-      mysql_stmt_num_fields)
+      mysql_stmt_field_count())
     - fetch metadata for any column with mysql_fetch_field,
       mysql_fetch_field_direct, mysql_fetch_fields, mysql_field_seek.
     - free returned MYSQL_RES structure with mysql_free_result.
@@ -3882,11 +3882,10 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
 
   if (!bind_count)
   {
-    if ((int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE)
-    {
-      set_stmt_error(stmt, CR_NO_PREPARE_STMT, unknown_sqlstate);
-    }
-    DBUG_RETURN(0);
+    int errorcode= (int) stmt->state < (int) MYSQL_STMT_PREPARE_DONE ?
+                   CR_NO_PREPARE_STMT : CR_NO_STMT_METADATA;
+    set_stmt_error(stmt, errorcode, unknown_sqlstate);
+    DBUG_RETURN(1);
   }
 
   /*
@@ -4278,7 +4277,7 @@ static void stmt_update_metadata(MYSQL_STMT *stmt, MYSQL_ROWS *data)
   row+= (stmt->field_count+9)/8;		/* skip null bits */
   bit= 4;					/* first 2 bits are reserved */
 
-  /* Go throw all fields and calculate metadata */
+  /* Go through all fields and calculate metadata */
   for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields ;
        bind < end ;
        bind++, field++)
diff --git a/tests/client_test.c b/tests/client_test.c
index b78339cc9bb9e9dec0cb70eef059d5be2b621ba4..fb130a17361c067819c857ffbdb4b23dc0d12a3e 100644
--- a/tests/client_test.c
+++ b/tests/client_test.c
@@ -5636,9 +5636,6 @@ static void test_subselect()
   rc= mysql_stmt_bind_param(stmt, bind);
   check_execute(stmt, rc);
 
-  rc= mysql_stmt_bind_result(stmt, bind);
-  check_execute(stmt, rc);
-
   id= 2;
   rc= mysql_stmt_execute(stmt);
   check_execute(stmt, rc);
@@ -5982,7 +5979,7 @@ static void test_pure_coverage()
   check_execute(stmt, rc);
 
   rc= mysql_stmt_bind_result(stmt, (MYSQL_BIND*)0);
-  check_execute(stmt, rc);
+  DIE_UNLESS(rc == 1);
 
   mysql_stmt_close(stmt);