Warning if the library API version differs from the headers used to compile.

Patch versions are not considered but major.minor
Fix build of ext/mysql with 4.0.x and pre.
This commit is contained in:
Andrey Hristov 2008-10-27 12:07:35 +00:00
parent 94a948e01f
commit e8e843b39e
2 changed files with 34 additions and 2 deletions

View File

@ -124,10 +124,14 @@ static MYSQLND_QCACHE *mysql_mysqlnd_qcache;
#endif
#ifdef CLIENT_MULTI_STATEMENTS
#define MYSQL_DISABLE_MQ if (mysql->multi_query) { \
mysql_set_server_option(mysql->conn, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \
mysql->multi_query = 0; \
}
}
#else
#define MYSQL_DISABLE_MQ
#endif
/* {{{ mysql_functions[]
@ -627,6 +631,13 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
zend_bool free_host=0, new_link=0;
long connect_timeout;
#if !defined(MYSQL_USE_MYSQLND)
if ((MYSQL_VERSION_ID / 100) != (mysql_get_client_version() / 100)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Headers and client library minor version mismatch. Headers:%d Library:%d",
MYSQL_VERSION_ID, mysql_get_client_version());
}
#endif
connect_timeout = MySG(connect_timeout);
@ -682,8 +693,9 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
client_flags ^= CLIENT_LOCAL_FILES;
}
#ifdef CLIENT_MULTI_STATEMENTS
client_flags &= ~CLIENT_MULTI_STATEMENTS; /* don't allow multi_queries via connect parameter */
#endif
hashed_details_length = spprintf(&hashed_details, 0, "mysql_%s_%s_%s_%ld", SAFE_STRING(host_and_port), SAFE_STRING(user), SAFE_STRING(passwd), client_flags);
}
@ -735,7 +747,11 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
/* create the link */
mysql = (php_mysql_conn *) malloc(sizeof(php_mysql_conn));
mysql->active_result_id = 0;
#ifdef CLIENT_MULTI_STATEMENTS
mysql->multi_query = client_flags & CLIENT_MULTI_STATEMENTS? 1:0;
#else
mysql->multi_query = 0;
#endif
#ifndef MYSQL_USE_MYSQLND
mysql->conn = mysql_init(NULL);
#else
@ -800,7 +816,11 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
}
mysql = (php_mysql_conn *) le->ptr;
mysql->active_result_id = 0;
#ifdef CLIENT_MULTI_STATEMENTS
mysql->multi_query = client_flags & CLIENT_MULTI_STATEMENTS? 1:0;
#else
mysql->multi_query = 0;
#endif
/* ensure that the link did not die */
#if defined(MYSQL_USE_MYSQLND)
mysqlnd_end_psession(mysql->conn);
@ -882,7 +902,11 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
mysql = (php_mysql_conn *) emalloc(sizeof(php_mysql_conn));
mysql->active_result_id = 0;
#ifdef CLIENT_MULTI_STATEMENTS
mysql->multi_query = 1;
#else
mysql->multi_query = 0;
#endif
#ifndef MYSQL_USE_MYSQLND
mysql->conn = mysql_init(NULL);
#else

View File

@ -61,6 +61,14 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne
zend_rsrc_list_entry *le;
mysqli_plist_entry *plist = NULL;
#if !defined(MYSQL_USE_MYSQLND)
if ((MYSQL_VERSION_ID / 100) != (mysql_get_client_version() / 100)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"Headers and client library minor version mismatch. Headers:%d Library:%d",
MYSQL_VERSION_ID, mysql_get_client_version());
}
#endif
if (getThis() && !ZEND_NUM_ARGS() && in_ctor) {
RETURN_NULL();
}