diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 42ea6039b6c49fbe8eeeb3ac4fdbcf335093fd7a..80aa575265b374448f0aec69165b8b7d74c3b2d1 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -3845,7 +3845,23 @@ mysql_parse(THD *thd, char *inBuf, uint length)
   if (query_cache_send_result_to_client(thd, inBuf, length) <= 0)
   {
     LEX *lex=lex_start(thd, (uchar*) inBuf, length);
-    if (!yyparse((void *)thd) && ! thd->is_fatal_error)
+    if (!yyparse((void *)thd) && ! thd->is_fatal_error &&
+        /*
+          If this is not a multiple query, ensure that it has been
+          successfully parsed until the last character. This is to prevent
+          against a wrong (too big) length passed to mysql_real_query(),
+          mysql_prepare()... which can generate garbage characters at the
+          end. If the query was initially multiple, found_colon will be false
+          only when we are in the last query; this last query had already
+          been end-spaces-stripped by alloc_query() in dispatch_command(); as
+          end spaces are the only thing we accept at the end of a query, and
+          they have been stripped already, here we can require that nothing
+          remains after parsing.
+        */
+        (thd->lex->found_colon ||
+         (char*)(thd->lex->ptr) == (thd->query+thd->query_length+1) ||
+         /* yyerror() will show the garbage chars to the user */
+         (yyerror("syntax error"), 0)))
     {
 #ifndef NO_EMBEDDED_ACCESS_CHECKS
       if (mqh_used && thd->user_connect &&
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 2cf0000d973dc50090262c41bff07b6589275367..cf723e18d85eb659f843a0f98a2708be6a6fbe3c 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -909,7 +909,15 @@ bool mysql_stmt_prepare(THD *thd, char *packet, uint packet_length)
   lex->safe_to_cache_query= 0;
   lex->param_count= 0;
 
-  if (yyparse((void *)thd) || thd->is_fatal_error || send_prepare_results(stmt))
+  if (yyparse((void *)thd) || thd->is_fatal_error ||
+      /*
+        Check for wrong (too big) length passed to mysql_prepare() resulting in
+        garbage at the end of the query. There is a similar check in mysql_parse().
+      */
+      (!thd->lex->found_colon && 
+       (char*)(thd->lex->ptr) != (thd->query+thd->query_length+1) &&
+       /* yyerror() will show the garbage chars to the user */
+       (yyerror("syntax error"), 1)) || send_prepare_results(stmt))
     goto yyparse_err;
 
   lex_end(lex);
diff --git a/tests/client_test.c b/tests/client_test.c
index 66637dcb04be4c4f57780c36fd071f2cf6a3f659..e0785f9d6330d220c2395da29ce37a3752b67b72 100644
--- a/tests/client_test.c
+++ b/tests/client_test.c
@@ -153,6 +153,17 @@ static void print_st_error(MYSQL_STMT *stmt, const char *msg)
   else if (msg) fprintf(stderr, " [MySQL] %s\n", msg);
 }
 
+/*
+  This is to be what mysql_query() is for mysql_real_query(), for
+  mysql_prepare(): a variant without the 'length' parameter.
+*/
+MYSQL_STMT *STDCALL
+mysql_simple_prepare(MYSQL  *mysql, const char *query)
+{
+  return mysql_prepare(mysql, query, strlen(query));
+}
+
+
 /********************************************************
 * connect to the server                                 *
 *********************************************************/
@@ -459,14 +470,14 @@ uint my_process_stmt_result(MYSQL_STMT *stmt)
 /********************************************************
 * process the stmt result set                           *
 *********************************************************/
-uint my_stmt_result(const char *buff, unsigned long length)
+uint my_stmt_result(const char *buff)
 {
   MYSQL_STMT *stmt;
   uint       row_count;
   int        rc;
 
   fprintf(stdout,"\n\n %s", buff);
-  stmt= mysql_prepare(mysql,buff,length);
+  stmt= mysql_simple_prepare(mysql,buff);
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -605,7 +616,7 @@ static void execute_prepare_query(const char *query, ulonglong exp_count)
   ulonglong  affected_rows;
   int        rc;
 
-  stmt= mysql_prepare(mysql,query,strlen(query));
+  stmt= mysql_simple_prepare(mysql,query);
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -913,7 +924,7 @@ static void test_prepare_simple()
 
   /* alter table */
   strmov(query,"ALTER TABLE test_prepare_simple ADD new char(20)");
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -921,7 +932,7 @@ static void test_prepare_simple()
 
   /* insert */
   strmov(query,"INSERT INTO test_prepare_simple VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -929,7 +940,7 @@ static void test_prepare_simple()
 
   /* update */
   strmov(query,"UPDATE test_prepare_simple SET id=? WHERE id=? AND name= ?");
-  stmt = mysql_prepare(mysql, query, 100);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,3);
@@ -937,7 +948,7 @@ static void test_prepare_simple()
 
   /* delete */
   strmov(query,"DELETE FROM test_prepare_simple WHERE id=10");
-  stmt = mysql_prepare(mysql, query, 60);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -948,7 +959,7 @@ static void test_prepare_simple()
 
   /* delete */
   strmov(query,"DELETE FROM test_prepare_simple WHERE id=?");
-  stmt = mysql_prepare(mysql, query, 50);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,1);
@@ -959,7 +970,7 @@ static void test_prepare_simple()
 
   /* select */
   strmov(query,"SELECT * FROM test_prepare_simple WHERE id=? AND name= ?");
-  stmt = mysql_prepare(mysql, query, 100);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -997,7 +1008,7 @@ static void test_prepare_field_result()
   /* insert */
   strmov(query,"SELECT int_c,var_c,date_c as date,ts_c,char_c FROM \
                   test_prepare_field_result as t1 WHERE int_c=?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,1);
@@ -1045,11 +1056,11 @@ static void test_prepare_syntax()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_prepare_syntax VALUES(?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init_r(stmt);
 
   strmov(query,"SELECT id,name FROM test_prepare_syntax WHERE id=? AND WHERE");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init_r(stmt);
 
   /* now fetch the results ..*/
@@ -1095,7 +1106,7 @@ static void test_prepare()
 
   /* insert by prepare */
   strxmov(query,"INSERT INTO my_prepare VALUES(?,?,?,?,?,?,?)",NullS);
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,7);
@@ -1159,9 +1170,9 @@ static void test_prepare()
   myquery(rc);
 
   /* test the results now, only one row should exists */
-  assert(tiny_data == (char) my_stmt_result("SELECT * FROM my_prepare",50));
+  assert(tiny_data == (char) my_stmt_result("SELECT * FROM my_prepare"));
       
-  stmt = mysql_prepare(mysql,"SELECT * FROM my_prepare",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM my_prepare");
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt, bind);
@@ -1266,7 +1277,7 @@ static void test_double_compare()
   myquery(rc);
 
   strmov(query, "UPDATE test_double_compare SET col1=100 WHERE col1 = ? AND col2 = ? AND COL3 = ?");
-  stmt = mysql_prepare(mysql,query, strlen(query));
+  stmt = mysql_simple_prepare(mysql,query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,3);
@@ -1347,11 +1358,11 @@ static void test_null()
 
   /* insert by prepare, wrong column name */
   strmov(query,"INSERT INTO test_null(col3,col2) VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init_r(stmt);
 
   strmov(query,"INSERT INTO test_null(col1,col2) VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -1393,7 +1404,7 @@ static void test_null()
   myquery(rc);
 
   nData*= 2;
-  assert(nData == my_stmt_result("SELECT * FROM test_null", 30));
+  assert(nData == my_stmt_result("SELECT * FROM test_null"));
 
   /* Fetch results */
   bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -1403,7 +1414,7 @@ static void test_null()
   bind[0].is_null= &is_null[0];
   bind[1].is_null= &is_null[1];
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_null",30);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_null");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -1475,9 +1486,9 @@ static void test_fetch_null()
 
   strmov((char *)query , "SELECT * FROM test_fetch_null");
 
-  assert(3 == my_stmt_result(query,50));
+  assert(3 == my_stmt_result(query));
 
-  stmt = mysql_prepare(mysql, query, 50);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt,bind);
@@ -1516,7 +1527,7 @@ static void test_select_version()
 
   myheader("test_select_version");
 
-  stmt = mysql_prepare(mysql, "SELECT @@version", 30);
+  stmt = mysql_simple_prepare(mysql, "SELECT @@version");
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -1538,7 +1549,7 @@ static void test_select_simple()
 
   myheader("test_select_simple");
 
-  stmt = mysql_prepare(mysql, "SHOW TABLES FROM mysql", 50);
+  stmt = mysql_simple_prepare(mysql, "SHOW TABLES FROM mysql");
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -1630,7 +1641,7 @@ static void test_select_prepare()
   rc = mysql_commit(mysql);
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_select",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_select");
   mystmt_init(stmt);
   
   rc = mysql_execute(stmt);
@@ -1660,7 +1671,7 @@ static void test_select_prepare()
   rc = mysql_commit(mysql);
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_select",25);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_select");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -1715,7 +1726,7 @@ static void test_select()
   myquery(rc);
 
   strmov(query,"SELECT * FROM test_select WHERE id=? AND name=?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -1774,7 +1785,7 @@ session_id  char(9) NOT NULL, \
   myquery(rc);
 
   strmov(query,"SELECT * FROM test_select WHERE session_id = ?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,1);
@@ -1852,7 +1863,7 @@ static void test_bug1180()
   myquery(rc);
 
   strmov(query,"SELECT * FROM test_select WHERE ?=\"1111\" and session_id = \"abc\"");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,1);
@@ -1932,7 +1943,7 @@ static void test_bug1644()
   myquery(rc);
 
   strmov(query, "INSERT INTO foo_dfr VALUES (?,?,?,? )");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt, 4);
@@ -2030,7 +2041,7 @@ static void test_select_show()
   rc = mysql_query(mysql, "CREATE TABLE test_show(id int(4) NOT NULL primary key, name char(2))");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql, "show columns from test_show", 30);
+  stmt = mysql_simple_prepare(mysql, "show columns from test_show");
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -2041,11 +2052,11 @@ static void test_select_show()
   my_process_stmt_result(stmt);
   mysql_stmt_close(stmt);
   
-  stmt = mysql_prepare(mysql, "show tables from mysql like ?", 50);
+  stmt = mysql_simple_prepare(mysql, "show tables from mysql like ?");
   mystmt_init_r(stmt);
   
   strxmov(query,"show tables from ", current_db, " like \'test_show\'", NullS);
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -2054,7 +2065,7 @@ static void test_select_show()
   my_process_stmt_result(stmt);
   mysql_stmt_close(stmt);
   
-  stmt = mysql_prepare(mysql, "describe test_show", 30);
+  stmt = mysql_simple_prepare(mysql, "describe test_show");
   mystmt_init(stmt);
   
   rc = mysql_execute(stmt);
@@ -2063,7 +2074,7 @@ static void test_select_show()
   my_process_stmt_result(stmt);
   mysql_stmt_close(stmt);
   
-  stmt = mysql_prepare(mysql, "show keys from test_show", 30);
+  stmt = mysql_simple_prepare(mysql, "show keys from test_show");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -2115,7 +2126,7 @@ static void test_simple_update()
 
   /* insert by prepare */
   strmov(query,"UPDATE test_update SET col2=? WHERE col1=?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2190,11 +2201,11 @@ static void test_long_data()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_long_data(col1,col2) VALUES(?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init_r(stmt);
 
   strmov(query,"INSERT INTO test_long_data(col1,col2,col3) VALUES(?,?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,3);
@@ -2282,7 +2293,7 @@ static void test_long_data_str()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_long_data_str VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2373,7 +2384,7 @@ static void test_long_data_str1()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_long_data_str VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2462,7 +2473,7 @@ static void test_long_data_bin()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_long_data_bin VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2557,7 +2568,7 @@ static void test_simple_delete()
 
   /* insert by prepare */
   strmov(query,"DELETE FROM test_simple_delete WHERE col1=? AND col2=? AND col3=100");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2637,7 +2648,7 @@ static void test_update()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_update(col2,col3) VALUES(?,?)");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2667,7 +2678,7 @@ static void test_update()
   mysql_stmt_close(stmt);
 
   strmov(query,"UPDATE test_update SET col2=? WHERE col3=?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -2733,7 +2744,7 @@ static void test_prepare_noparam()
 
   /* insert by prepare */
   strmov(query,"INSERT INTO my_prepare VALUES(10,'venu')");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -2812,7 +2823,7 @@ static void test_bind_result()
   bind[1].length= &length1;
   bind[1].is_null= &is_null[1];
 
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_bind_result", 50);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_bind_result");
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt,bind);
@@ -2933,7 +2944,7 @@ static void test_bind_result_ext()
   bind[7].length= &bLength;
   bind[7].buffer_length= sizeof(bData);
 
-  stmt = mysql_prepare(mysql, "select * from test_bind_result", 50);
+  stmt = mysql_simple_prepare(mysql, "select * from test_bind_result");
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt,bind);
@@ -3058,7 +3069,7 @@ static void test_bind_result_ext1()
     bind[i].length= &length[i];
   }
 
-  stmt = mysql_prepare(mysql, "select * from test_bind_result", 50);
+  stmt = mysql_simple_prepare(mysql, "select * from test_bind_result");
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt,bind);
@@ -3118,7 +3129,7 @@ static void bind_fetch(int row_count)
   MYSQL_BIND   bind[7];
   my_bool      is_null[7]; 
 
-  stmt = mysql_prepare(mysql,"INSERT INTO test_bind_fetch VALUES(?,?,?,?,?,?,?)",100);
+  stmt = mysql_simple_prepare(mysql,"INSERT INTO test_bind_fetch VALUES(?,?,?,?,?,?,?)");
   mystmt_init(stmt);
 
   verify_param_count(stmt, 7);
@@ -3151,9 +3162,9 @@ static void bind_fetch(int row_count)
   mysql_stmt_close(stmt);
 
   assert(row_count == (int)
-           my_stmt_result("SELECT * FROM test_bind_fetch",50));
+           my_stmt_result("SELECT * FROM test_bind_fetch"));
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_bind_fetch",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_bind_fetch");
   myquery(rc);
 
   for (i= 0; i < (int) array_elements(bind); i++)
@@ -3321,9 +3332,9 @@ static void test_fetch_date()
   bind[6].buffer_length= sizeof(ts_6);
   bind[6].length= &ts6_length;
 
-  assert(1 == my_stmt_result("SELECT * FROM test_bind_result",50));
+  assert(1 == my_stmt_result("SELECT * FROM test_bind_result"));
 
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_bind_result", 50);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_bind_result");
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt,bind);
@@ -3651,7 +3662,7 @@ static void test_prepare_ext()
 
   /* insert by prepare - all integers */
   strmov(query,(char *)"INSERT INTO test_prepare_ext(c1,c2,c3,c4,c5,c6) VALUES(?,?,?,?,?,?)");
-  stmt = mysql_prepare(mysql,query, strlen(query));
+  stmt = mysql_simple_prepare(mysql,query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,6);
@@ -3704,7 +3715,7 @@ static void test_prepare_ext()
   rc = mysql_commit(mysql);
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"SELECT c1,c2,c3,c4,c5,c6 FROM test_prepare_ext",100);
+  stmt = mysql_simple_prepare(mysql,"SELECT c1,c2,c3,c4,c5,c6 FROM test_prepare_ext");
   mystmt_init(stmt);
 
   /* get the result */
@@ -3850,7 +3861,7 @@ static void test_insert()
   myquery(rc);
 
   /* insert by prepare */
-  stmt = mysql_prepare(mysql, "INSERT INTO test_prep_insert VALUES(?,?)", 70);
+  stmt = mysql_simple_prepare(mysql, "INSERT INTO test_prep_insert VALUES(?,?)");
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -3922,7 +3933,7 @@ static void test_prepare_resultset()
                                 name varchar(50),extra double)");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_prepare_resultset", 60);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_prepare_resultset");
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -4034,25 +4045,25 @@ static void test_stmt_close()
   myquery(rc);
 
   strmov(query,"ALTER TABLE test_stmt_close ADD name varchar(20)");
-  stmt1= mysql_prepare(lmysql, query, 70);
+  stmt1= mysql_simple_prepare(lmysql, query);
   mystmt_init(stmt1);
   
   verify_param_count(stmt1, 0);
   
   strmov(query,"INSERT INTO test_stmt_close(id) VALUES(?)");
-  stmt_x= mysql_prepare(mysql, query, 70);
+  stmt_x= mysql_simple_prepare(mysql, query);
   mystmt_init(stmt_x);
 
   verify_param_count(stmt_x, 1);
   
   strmov(query,"UPDATE test_stmt_close SET id=? WHERE id=?");
-  stmt3= mysql_prepare(lmysql, query, 70);
+  stmt3= mysql_simple_prepare(lmysql, query);
   mystmt_init(stmt3);
   
   verify_param_count(stmt3, 2);
   
   strmov(query,"SELECT * FROM test_stmt_close WHERE id=?");
-  stmt2= mysql_prepare(lmysql, query, 70);
+  stmt2= mysql_simple_prepare(lmysql, query);
   mystmt_init(stmt2);
 
   verify_param_count(stmt2, 1);
@@ -4119,7 +4130,7 @@ static void test_set_variable()
 
   mysql_autocommit(mysql, TRUE);
   
-  stmt1 = mysql_prepare(mysql, "show variables like 'max_error_count'", 50);
+  stmt1 = mysql_simple_prepare(mysql, "show variables like 'max_error_count'");
   mystmt_init(stmt1);
 
   get_bind[0].buffer_type= MYSQL_TYPE_STRING;
@@ -4150,7 +4161,7 @@ static void test_set_variable()
   rc = mysql_fetch(stmt1);
   assert(rc == MYSQL_NO_DATA);
 
-  stmt = mysql_prepare(mysql, "set max_error_count=?", 50);
+  stmt = mysql_simple_prepare(mysql, "set max_error_count=?");
   mystmt_init(stmt);
 
   set_bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -4225,7 +4236,7 @@ static void test_insert_meta()
   myquery(rc);
 
   strmov(query,"INSERT INTO test_prep_insert VALUES(10,'venu1','test')");
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -4236,7 +4247,7 @@ static void test_insert_meta()
   mysql_stmt_close(stmt);
 
   strmov(query,"INSERT INTO test_prep_insert VALUES(?,'venu',?)");
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -4288,7 +4299,7 @@ static void test_update_meta()
   myquery(rc);
 
   strmov(query,"UPDATE test_prep_update SET col1=10, col2='venu1' WHERE col3='test'");
-  stmt = mysql_prepare(mysql, query, 100);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -4299,7 +4310,7 @@ static void test_update_meta()
   mysql_stmt_close(stmt);
 
   strmov(query,"UPDATE test_prep_update SET col1=?, col2='venu' WHERE col3=?");
-  stmt = mysql_prepare(mysql, query, 100);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -4355,7 +4366,7 @@ static void test_select_meta()
   myquery(rc);
 
   strmov(query,"SELECT * FROM test_prep_select WHERE col1=10");
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,0);
@@ -4364,7 +4375,7 @@ static void test_select_meta()
   mytest_r(result);
 
   strmov(query,"SELECT col1, col3 from test_prep_select WHERE col1=? AND col3='test' AND col2= ?");
-  stmt = mysql_prepare(mysql, query, 120);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   verify_param_count(stmt,2);
@@ -4499,10 +4510,10 @@ static void test_multi_stmt()
   rc = mysql_query(mysql,"INSERT INTO test_multi_table values(10,'mysql')");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_multi_table WHERE id = ?", 100);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_multi_table WHERE id = ?");
   mystmt_init(stmt);
 
-  stmt2 = mysql_prepare(mysql, "UPDATE test_multi_table SET name='updated' WHERE id=10",100);
+  stmt2 = mysql_simple_prepare(mysql, "UPDATE test_multi_table SET name='updated' WHERE id=10");
   mystmt_init(stmt2);
 
   verify_param_count(stmt,1);
@@ -4544,7 +4555,7 @@ static void test_multi_stmt()
   assert(rc == MYSQL_NO_DATA);
 
   /* alter the table schema now */
-  stmt1 = mysql_prepare(mysql,"DELETE FROM test_multi_table WHERE id = ? AND name=?",100);
+  stmt1 = mysql_simple_prepare(mysql,"DELETE FROM test_multi_table WHERE id = ? AND name=?");
   mystmt_init(stmt1);
 
   verify_param_count(stmt1,2);
@@ -4584,7 +4595,7 @@ static void test_multi_stmt()
   rc = mysql_fetch(stmt);
   assert(rc == MYSQL_NO_DATA);
 
-  assert(0 == my_stmt_result("SELECT * FROM test_multi_table",50));
+  assert(0 == my_stmt_result("SELECT * FROM test_multi_table"));
 
   mysql_stmt_close(stmt);
   mysql_stmt_close(stmt2);
@@ -4631,7 +4642,7 @@ static void test_manual_sample()
   
   /* Prepare a insert query with 3 parameters */
   strmov(query, "INSERT INTO test_table(col1,col2,col3) values(?,?,?)");
-  if (!(stmt = mysql_prepare(mysql,query,strlen(query))))
+  if (!(stmt = mysql_simple_prepare(mysql,query)))
   {
     fprintf(stderr, "\n prepare, insert failed");
     fprintf(stderr, "\n %s", mysql_error(mysql));
@@ -4735,7 +4746,7 @@ static void test_manual_sample()
     fprintf(stderr, "\n %s", mysql_stmt_error(stmt));
     exit(0);
   }
-  assert(2 == my_stmt_result("SELECT * FROM test_table",50));
+  assert(2 == my_stmt_result("SELECT * FROM test_table"));
 
   /* DROP THE TABLE */
   if (mysql_query(mysql,"DROP TABLE test_table"))
@@ -4770,7 +4781,7 @@ static void test_prepare_alter()
   rc = mysql_query(mysql,"INSERT INTO test_prep_alter values(10,'venu'),(20,'mysql')");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql, "INSERT INTO test_prep_alter VALUES(?,'monty')", 100);
+  stmt = mysql_simple_prepare(mysql, "INSERT INTO test_prep_alter VALUES(?,'monty')");
   mystmt_init(stmt);
 
   verify_param_count(stmt,1);
@@ -4796,7 +4807,7 @@ static void test_prepare_alter()
   rc = mysql_execute(stmt);
   mystmt(stmt, rc);
 
-  assert(4 == my_stmt_result("SELECT * FROM test_prep_alter",50));
+  assert(4 == my_stmt_result("SELECT * FROM test_prep_alter"));
 
   mysql_stmt_close(stmt);
 }
@@ -4978,7 +4989,7 @@ static void test_store_result()
   bind[1].is_null= &is_null[1];
   length1= 0;
 
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_store_result", 50);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_store_result");
   mystmt_init(stmt);
 
   rc = mysql_bind_result(stmt,bind);
@@ -5089,7 +5100,7 @@ static void test_store_result1()
   rc = mysql_commit(mysql);
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_store_result",100);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_store_result");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -5160,7 +5171,7 @@ static void test_store_result2()
   bind[0].is_null= 0;
 
   strmov((char *)query , "SELECT col1 FROM test_store_result where col1= ?");
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   rc = mysql_bind_param(stmt,bind);
@@ -5252,7 +5263,7 @@ static void test_subselect()
   bind[0].length= 0;
   bind[0].is_null= 0;
 
-  stmt = mysql_prepare(mysql, "INSERT INTO test_sub2(id) SELECT * FROM test_sub1 WHERE id=?", 100);
+  stmt = mysql_simple_prepare(mysql, "INSERT INTO test_sub2(id) SELECT * FROM test_sub1 WHERE id=?", 100);
   mystmt_init(stmt);
 
   rc = mysql_bind_param(stmt,bind);
@@ -5275,13 +5286,13 @@ static void test_subselect()
 
   mysql_stmt_close(stmt);
 
-  assert(3 == my_stmt_result("SELECT * FROM test_sub2",50));
+  assert(3 == my_stmt_result("SELECT * FROM test_sub2"));
 
   strmov((char *)query , "SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=?)");
-  assert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=8)",100));
-  assert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=7)",100));
+  assert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=8)"));
+  assert(1 == my_stmt_result("SELECT ROW(1,7) IN (select id, id1 from test_sub2 WHERE id1=7)"));
 
-  stmt = mysql_prepare(mysql, query, 150);
+  stmt = mysql_simple_prepare(mysql, query, 150);
   mystmt_init(stmt);
 
   rc = mysql_bind_param(stmt,bind);
@@ -5335,7 +5346,7 @@ static void test_bind_date_conv(uint row_count)
   ulong        second_part;
   uint         year, month, day, hour, minute, sec;
 
-  stmt = mysql_prepare(mysql,"INSERT INTO test_date VALUES(?,?,?,?)", 100);
+  stmt = mysql_simple_prepare(mysql,"INSERT INTO test_date VALUES(?,?,?,?)");
   mystmt_init(stmt);
 
   verify_param_count(stmt, 4);  
@@ -5389,9 +5400,9 @@ static void test_bind_date_conv(uint row_count)
 
   mysql_stmt_close(stmt);
 
-  assert(row_count == my_stmt_result("SELECT * FROM test_date",50));
+  assert(row_count == my_stmt_result("SELECT * FROM test_date"));
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_date",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_date");
   myquery(rc);
 
   rc = mysql_bind_result(stmt, bind);
@@ -5586,14 +5597,14 @@ static void test_pure_coverage()
   rc = mysql_query(mysql,"CREATE TABLE test_pure(c1 int, c2 varchar(20))");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"insert into test_pure(c67788) values(10)",100);
+  stmt = mysql_simple_prepare(mysql,"insert into test_pure(c67788) values(10)");
   mystmt_init_r(stmt);
   
 #ifndef DBUG_OFF
   stmt = mysql_prepare(mysql,(const char *)0,0);
   mystmt_init_r(stmt);
   
-  stmt = mysql_prepare(mysql,"insert into test_pure(c2) values(10)",100);
+  stmt = mysql_simple_prepare(mysql,"insert into test_pure(c2) values(10)");
   mystmt_init(stmt);
 
   rc = mysql_bind_param(stmt, bind);
@@ -5602,7 +5613,7 @@ static void test_pure_coverage()
   mysql_stmt_close(stmt);
 #endif
 
-  stmt = mysql_prepare(mysql,"insert into test_pure(c2) values(?)",100);
+  stmt = mysql_simple_prepare(mysql,"insert into test_pure(c2) values(?)");
   mystmt_init(stmt);
 
 #ifndef DBUG_OFF
@@ -5630,7 +5641,7 @@ static void test_pure_coverage()
 
   mysql_stmt_close(stmt);
 
-  stmt = mysql_prepare(mysql,"select * from test_pure",100);
+  stmt = mysql_simple_prepare(mysql,"select * from test_pure");
   mystmt(stmt, rc);
 
   rc = mysql_execute(stmt);
@@ -5682,7 +5693,7 @@ static void test_buffers()
                           ,('Database'),('Open-Source'),('Popular')");
   myquery(rc);
   
-  stmt = mysql_prepare(mysql,"select str from test_buffer",100);
+  stmt = mysql_simple_prepare(mysql,"select str from test_buffer");
   mystmt_init(stmt);
   
   rc = mysql_execute(stmt);
@@ -5760,7 +5771,7 @@ static void test_open_direct()
   rc = mysql_query(mysql,"CREATE TABLE test_open_direct(id int, name char(6))");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"INSERT INTO test_open_direct values(10,'mysql')", 100);
+  stmt = mysql_simple_prepare(mysql,"INSERT INTO test_open_direct values(10,'mysql')");
   mystmt_init(stmt);
 
   rc = mysql_query(mysql, "SELECT * FROM test_open_direct");
@@ -5799,7 +5810,7 @@ static void test_open_direct()
   mysql_stmt_close(stmt);
 
   /* run a direct query in the middle of a fetch */
-  stmt= mysql_prepare(mysql,"SELECT * FROM test_open_direct",100);
+  stmt= mysql_simple_prepare(mysql,"SELECT * FROM test_open_direct");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -5818,7 +5829,7 @@ static void test_open_direct()
   myquery(rc);
 
   /* run a direct query with store result */
-  stmt= mysql_prepare(mysql,"SELECT * FROM test_open_direct",100);
+  stmt= mysql_simple_prepare(mysql,"SELECT * FROM test_open_direct");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -5849,8 +5860,8 @@ static void test_fetch_nobuffs()
 
   myheader("test_fetch_nobuffs");
 
-  stmt = mysql_prepare(mysql,"SELECT DATABASE(), CURRENT_USER(), \
-                              CURRENT_DATE(), CURRENT_TIME()",100);
+  stmt = mysql_simple_prepare(mysql,"SELECT DATABASE(), CURRENT_USER(), \
+                              CURRENT_DATE(), CURRENT_TIME()");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -5923,7 +5934,7 @@ static void test_ushort_bug()
   myquery(rc);
   
   
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_ushort",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_ushort");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6007,7 +6018,7 @@ static void test_sshort_bug()
   myquery(rc);
   
   
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_sshort",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_sshort");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6091,7 +6102,7 @@ static void test_stiny_bug()
   myquery(rc);
   
   
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_stiny",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_stiny");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6176,7 +6187,7 @@ static void test_field_misc()
 
   mysql_free_result(result);
   
-  stmt = mysql_prepare(mysql,"SELECT @@autocommit",20);
+  stmt = mysql_simple_prepare(mysql,"SELECT @@autocommit");
   mystmt_init(stmt);
   
   rc = mysql_execute(stmt);
@@ -6196,7 +6207,7 @@ static void test_field_misc()
   mysql_free_result(result);
   mysql_stmt_close(stmt);
 
-  stmt = mysql_prepare(mysql, "SELECT @@table_type", 30);
+  stmt = mysql_simple_prepare(mysql, "SELECT @@table_type");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6220,7 +6231,7 @@ static void test_field_misc()
 
   mysql_stmt_close(stmt);
 
-  stmt = mysql_prepare(mysql, "SELECT @@table_type", 30);
+  stmt = mysql_simple_prepare(mysql, "SELECT @@table_type");
   mystmt_init(stmt);
 
   result = mysql_get_metadata(stmt);
@@ -6240,7 +6251,7 @@ static void test_field_misc()
   mysql_free_result(result);
   mysql_stmt_close(stmt);
 
-  stmt = mysql_prepare(mysql, "SELECT @@max_error_count", 30);
+  stmt = mysql_simple_prepare(mysql, "SELECT @@max_error_count");
   mystmt_init(stmt);
 
   result = mysql_get_metadata(stmt);
@@ -6260,7 +6271,7 @@ static void test_field_misc()
   mysql_free_result(result);
   mysql_stmt_close(stmt);
   
-  stmt = mysql_prepare(mysql, "SELECT @@max_allowed_packet", 30);
+  stmt = mysql_simple_prepare(mysql, "SELECT @@max_allowed_packet");
   mystmt_init(stmt);
 
   result = mysql_get_metadata(stmt);
@@ -6280,7 +6291,7 @@ static void test_field_misc()
   mysql_free_result(result);
   mysql_stmt_close(stmt);
   
-  stmt = mysql_prepare(mysql, "SELECT @@sql_warnings", 30);
+  stmt = mysql_simple_prepare(mysql, "SELECT @@sql_warnings");
   mystmt_init(stmt);
   
   result = mysql_get_metadata(stmt);
@@ -6341,7 +6352,7 @@ static void test_set_option()
   mysql_free_result(result);
   
   fprintf(stdout,"\n with SQL_SELECT_LIMIT=2 (prepare)");  
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_limit", 50);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_limit");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6356,7 +6367,7 @@ static void test_set_option()
   rc= mysql_query(mysql,"SET OPTION SQL_SELECT_LIMIT=DEFAULT");
   myquery(rc);
   
-  stmt = mysql_prepare(mysql, "SELECT * FROM test_limit", 50);
+  stmt = mysql_simple_prepare(mysql, "SELECT * FROM test_limit");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6433,18 +6444,20 @@ static void test_prepare_grant()
     execute_prepare_query("INSERT INTO test_grant(a) VALUES(NULL)",1);    
     execute_prepare_query("INSERT INTO test_grant VALUES(NULL)",1);
     execute_prepare_query("UPDATE test_grant SET a=9 WHERE a=1",1);
-    assert(4 == my_stmt_result("SELECT a FROM test_grant",50));
-    
+    assert(4 == my_stmt_result("SELECT a FROM test_grant"));
+
+    /* Both DELETE expected to fail as user does not have DELETE privs */
+
     rc = mysql_query(mysql,"DELETE FROM test_grant");
     myquery_r(rc);
 
-    stmt= mysql_prepare(mysql,"DELETE FROM test_grant",50);
+    stmt= mysql_simple_prepare(mysql,"DELETE FROM test_grant");
     mystmt_init(stmt);
 
     rc = mysql_execute(stmt);
     myquery_r(rc);
     
-    assert(4 == my_stmt_result("SELECT * FROM test_grant",50));
+    assert(4 == my_stmt_result("SELECT * FROM test_grant"));
     
     mysql_close(lmysql);        
     mysql= org_mysql;
@@ -6487,7 +6500,7 @@ static void test_frm_bug()
   rc= mysql_query(mysql,"flush tables");
   myquery(rc);
   
-  stmt = mysql_prepare(mysql, "show variables like 'datadir'", 50);
+  stmt = mysql_simple_prepare(mysql, "show variables like 'datadir'");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6570,7 +6583,7 @@ static void test_decimal_bug()
   rc = mysql_query(mysql, "insert into test_decimal_bug value(8),(10.22),(5.61)");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"select c1 from test_decimal_bug where c1= ?",50);
+  stmt = mysql_simple_prepare(mysql,"select c1 from test_decimal_bug where c1= ?");
   mystmt_init(stmt);
 
   bind[0].buffer_type= MYSQL_TYPE_DOUBLE;
@@ -6666,7 +6679,7 @@ static void test_explain_bug()
   rc = mysql_query(mysql, "CREATE TABLE test_explain(id int, name char(2))");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql, "explain test_explain", 30);
+  stmt = mysql_simple_prepare(mysql, "explain test_explain");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6702,7 +6715,7 @@ static void test_explain_bug()
   mysql_free_result(result);
   mysql_stmt_close(stmt);
   
-  stmt = mysql_prepare(mysql, "explain select id, name FROM test_explain", 50);
+  stmt = mysql_simple_prepare(mysql, "explain select id, name FROM test_explain");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -6950,10 +6963,10 @@ static void test_logs()
   myheader("test_logs");
 
 
-  rc = mysql_real_query(mysql, "DROP TABLE IF EXISTS test_logs", 100);
+  rc = mysql_query(mysql, "DROP TABLE IF EXISTS test_logs");
   myquery(rc);
 
-  rc = mysql_real_query(mysql, "CREATE TABLE test_logs(id smallint, name varchar(20))", 100);
+  rc = mysql_query(mysql, "CREATE TABLE test_logs(id smallint, name varchar(20))");
   myquery(rc);
 
   length= (ulong)(strmov((char *)data,"INSERT INTO test_logs VALUES(?,?)") - data);
@@ -7015,7 +7028,7 @@ static void test_logs()
   mysql_stmt_close(stmt);
 
   length= (ulong)(strmov((char *)data, "SELECT * FROM test_logs WHERE id=?") - data);
-  stmt = mysql_prepare(mysql, data, length+2);
+  stmt = mysql_prepare(mysql, data, length);
   mystmt_init(stmt); 
 
   rc = mysql_bind_param(stmt, bind);
@@ -7125,7 +7138,7 @@ static void test_nstmts()
     mysql_stmt_close(stmt);
   }
 
-  stmt = mysql_prepare(mysql," select count(*) from test_nstmts", 50);
+  stmt = mysql_simple_prepare(mysql," select count(*) from test_nstmts");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -7172,7 +7185,7 @@ static void test_fetch_seek()
   rc = mysql_query(mysql, "insert into test_seek(c2) values('venu'),('mysql'),('open'),('source')");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"select * from test_seek",50);
+  stmt = mysql_simple_prepare(mysql,"select * from test_seek");
   mystmt_init(stmt);
 
   bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -7267,7 +7280,7 @@ static void test_fetch_offset()
   rc = mysql_query(mysql, "insert into test_column values('abcdefghij'),(null)");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"select * from test_column",50);
+  stmt = mysql_simple_prepare(mysql,"select * from test_column");
   mystmt_init(stmt);
 
   bind[0].buffer_type= MYSQL_TYPE_STRING;
@@ -7350,7 +7363,7 @@ static void test_fetch_column()
   rc = mysql_query(mysql, "insert into test_column(c2) values('venu'),('mysql')");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"select * from test_column order by c2 desc", 50);
+  stmt = mysql_simple_prepare(mysql,"select * from test_column order by c2 desc");
   mystmt_init(stmt);
 
   bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -7537,7 +7550,7 @@ static void test_mem_overun()
 
   assert(1 == my_process_result(mysql));
   
-  stmt = mysql_prepare(mysql, "select * from t_mem_overun",30);
+  stmt = mysql_simple_prepare(mysql, "select * from t_mem_overun");
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -7583,7 +7596,7 @@ static void test_free_result()
   rc = mysql_query(mysql, "insert into test_free_result values(),(),()");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"select * from test_free_result",50);
+  stmt = mysql_simple_prepare(mysql,"select * from test_free_result");
   mystmt_init(stmt);
 
   bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -7662,7 +7675,7 @@ static void test_free_store_result()
   rc = mysql_query(mysql, "insert into test_free_result values(),(),()");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"select * from test_free_result",50);
+  stmt = mysql_simple_prepare(mysql,"select * from test_free_result");
   mystmt_init(stmt);
 
   bind[0].buffer_type= MYSQL_TYPE_LONG;
@@ -7749,7 +7762,7 @@ static void test_sqlmode()
 
   strcpy(query, "INSERT INTO test_piping VALUES(?||?)");
   fprintf(stdout,"\n  query: %s", query);
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   fprintf(stdout,"\n  total parameters: %ld", mysql_param_count(stmt));      
@@ -7781,7 +7794,7 @@ static void test_sqlmode()
   
   strcpy(query, "SELECT connection_id    ()");
   fprintf(stdout,"\n  query: %s", query);
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init_r(stmt);
 
   /* ANSI */
@@ -7792,7 +7805,7 @@ static void test_sqlmode()
 
   strcpy(query, "INSERT INTO test_piping VALUES(?||?)");
   fprintf(stdout,"\n  query: %s", query);
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
   fprintf(stdout,"\n  total parameters: %ld", mysql_param_count(stmt));      
 
@@ -7809,7 +7822,7 @@ static void test_sqlmode()
   /* ANSI mode spaces ... */
   strcpy(query, "SELECT connection_id    ()");
   fprintf(stdout,"\n  query: %s", query);
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -7832,7 +7845,7 @@ static void test_sqlmode()
 
   strcpy(query, "SELECT connection_id    ()");
   fprintf(stdout,"\n  query: %s", query);
-  stmt = mysql_prepare(mysql, query, 70);
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
 
   rc = mysql_execute(stmt);
@@ -7873,7 +7886,7 @@ static void test_ts()
   rc = mysql_commit(mysql);
   myquery(rc);
 
-  stmt = mysql_prepare(mysql,"INSERT INTO test_ts VALUES(?,?,?),(?,?,?)",50);
+  stmt = mysql_simple_prepare(mysql,"INSERT INTO test_ts VALUES(?,?,?),(?,?,?)");
   mystmt_init(stmt);
 
   ts.year= 2003;
@@ -7912,7 +7925,7 @@ static void test_ts()
   verify_col_data("test_ts","b","21:07:46");
   verify_col_data("test_ts","c","2003-07-12 21:07:46");
 
-  stmt = mysql_prepare(mysql,"SELECT * FROM test_ts",50);
+  stmt = mysql_simple_prepare(mysql,"SELECT * FROM test_ts");
   mystmt_init(stmt);
 
   prep_res = mysql_get_metadata(stmt);
@@ -7983,7 +7996,7 @@ static void test_bug1500()
   rc= mysql_commit(mysql);
   myquery(rc);
 
-  stmt= mysql_prepare(mysql,"SELECT i FROM test_bg1500 WHERE i IN (?,?,?)",44);
+  stmt= mysql_simple_prepare(mysql,"SELECT i FROM test_bg1500 WHERE i IN (?,?,?)");
   mystmt_init(stmt);
   verify_param_count(stmt,3);
 
@@ -8018,8 +8031,8 @@ static void test_bug1500()
   rc= mysql_commit(mysql);
   myquery(rc);
 
-  stmt= mysql_prepare(mysql,
-          "SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (?)",53);
+  stmt= mysql_simple_prepare(mysql,
+          "SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (?)");
   mystmt_init(stmt);
   
   verify_param_count(stmt,1);
@@ -8046,8 +8059,8 @@ static void test_bug1500()
   mysql_stmt_close(stmt);
   
   /* This should work too */
-  stmt= mysql_prepare(mysql,
-          "SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (CONCAT(?,'digger'))", 70);
+  stmt= mysql_simple_prepare(mysql,
+          "SELECT s FROM test_bg1500 WHERE MATCH (s) AGAINST (CONCAT(?,'digger'))");
   mystmt_init(stmt);
   
   verify_param_count(stmt,1);
@@ -8084,7 +8097,7 @@ static void test_bug1946()
   rc= mysql_query(mysql,"CREATE TABLE prepare_command(ID INT)");
   myquery(rc);
 
-  stmt = mysql_prepare(mysql, query, strlen(query));
+  stmt = mysql_simple_prepare(mysql, query);
   mystmt_init(stmt);
   rc= mysql_real_query(mysql, query, strlen(query));
   assert(rc != 0);
@@ -8095,6 +8108,28 @@ static void test_bug1946()
   rc= mysql_query(mysql,"DROP TABLE prepare_command");
 }
 
+static void test_parse_error_and_bad_length()
+{
+  MYSQL_STMT *stmt;
+  int rc;
+
+  /* check that we get 4 syntax errors over the 4 calls */
+  myheader("test_parse_error_and_bad_length");
+
+  rc= mysql_query(mysql,"SHOW DATABAAAA");
+  assert(rc);
+  fprintf(stdout, "Got error (as expected): '%s'\n", mysql_error(mysql));
+  rc= mysql_real_query(mysql,"SHOW DATABASES",100);
+  assert(rc);
+  fprintf(stdout, "Got error (as expected): '%s'\n", mysql_error(mysql));
+
+  stmt= mysql_simple_prepare(mysql,"SHOW DATABAAAA");
+  assert(!stmt);
+  fprintf(stdout, "Got error (as expected): '%s'\n", mysql_error(mysql));
+  stmt= mysql_prepare(mysql,"SHOW DATABASES",100);
+  assert(!stmt);
+  fprintf(stdout, "Got error (as expected): '%s'\n", mysql_error(mysql));
+}
 
 /*
   Read and parse arguments and MySQL options from my.cnf
@@ -8340,6 +8375,8 @@ int main(int argc, char **argv)
     test_bug1644();	    /* BUG#1644 */
     test_bug1946();         /* test that placeholders are allowed only in 
                                prepared queries */
+    test_parse_error_and_bad_length(); /* test if bad length param in
+                                         mysql_prepare() triggers error */
 
     end_time= time((time_t *)0);
     total_time+= difftime(end_time, start_time);