diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index d901008e007bbff79d7c81d83b3f51da20175fe3..8ac7f765e29506ceac96a727dafbb8e307c7e42c 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -1282,19 +1282,21 @@ bool QMYSQLDriver::open(const QString& db,
         if (writeTimeout != 0)
             mysql_options(d->mysql, MYSQL_OPT_WRITE_TIMEOUT, &writeTimeout);
 #endif
-        if (mysql_real_connect(d->mysql,
-                               host.isNull() ? static_cast<const char *>(0)
-                                             : host.toLocal8Bit().constData(),
-                               user.isNull() ? static_cast<const char *>(0)
-                                             : user.toLocal8Bit().constData(),
-                               password.isNull() ? static_cast<const char *>(0)
-                                                 : password.toLocal8Bit().constData(),
-                               db.isNull() ? static_cast<const char *>(0)
-                                           : db.toLocal8Bit().constData(),
-                               (port > -1) ? port : 0,
-                               unixSocket.isNull() ? static_cast<const char *>(0)
-                                           : unixSocket.toLocal8Bit().constData(),
-                               optionFlags)) {
+        MYSQL *mysql = mysql_real_connect(d->mysql,
+                                          host.isNull() ? static_cast<const char *>(0)
+                                                        : host.toLocal8Bit().constData(),
+                                          user.isNull() ? static_cast<const char *>(0)
+                                                        : user.toLocal8Bit().constData(),
+                                          password.isNull() ? static_cast<const char *>(0)
+                                                            : password.toLocal8Bit().constData(),
+                                          db.isNull() ? static_cast<const char *>(0)
+                                                      : db.toLocal8Bit().constData(),
+                                          (port > -1) ? port : 0,
+                                          unixSocket.isNull() ? static_cast<const char *>(0)
+                                                              : unixSocket.toLocal8Bit().constData(),
+                                          optionFlags);
+
+        if (mysql == d->mysql) {
             if (!db.isEmpty() && mysql_select_db(d->mysql, db.toLocal8Bit().constData())) {
                 setLastError(qMakeError(tr("Unable to open database '%1'").arg(db), QSqlError::ConnectionError, d));
                 mysql_close(d->mysql);
@@ -1305,12 +1307,17 @@ bool QMYSQLDriver::open(const QString& db,
             if (reconnect)
                 mysql_options(d->mysql, MYSQL_OPT_RECONNECT, &reconnect);
 #endif
+        } else {
+            setLastError(qMakeError(tr("Unable to connect"),
+                         QSqlError::ConnectionError, d));
+            mysql_close(d->mysql);
+            d->mysql = NULL;
+            setOpenError(true);
+            return false;
         }
     } else {
-        setLastError(qMakeError(tr("Unable to connect"),
-                     QSqlError::ConnectionError, d));
-        mysql_close(d->mysql);
-        d->mysql = NULL;
+        setLastError(qMakeError(tr("Failed to allocated data"),
+                     QSqlError::UnknownError, d));
         setOpenError(true);
         return false;
     }