From 202a0697f3f1771f241e7dadbe1ecbb8cb72b6c9 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sat, 29 Aug 2020 17:18:57 +1000 Subject: mysqli: use native api Tested with: * mysql-5.6.49-linux-glibc2.12-x86_64 * mysql-5.7.31-linux-glibc2.12-x86_64 * mysql-8.0.21-linux-glibc2.17-x86_64 * mariadb-10.5.6 configure --with-mysqli=/usr/local/$version/bin/mysql_config --with-pdo-mysql=/usr/local/$version MySQL-8.0 removed my_bool Some options where deprecated in mysql-8.0 MY_CHARSET_INFO used with exposed api mysql_get_character_set_info rather than internal structures. --- ext/mysqli/mysqli_api.c | 8 +++++--- ext/mysqli/mysqli_nonapi.c | 3 ++- ext/mysqli/php_mysqli_structs.h | 16 +++------------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 27cf68d700..0c17e1599e 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -614,7 +614,7 @@ PHP_FUNCTION(mysqli_change_user) size_t user_len, password_len, dbname_len; zend_ulong rc; #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET) - const CHARSET_INFO * old_charset; + MY_CHARSET_INFO old_charset; #endif if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Osss!", &mysql_link, mysqli_link_class_entry, &user, &user_len, &password, &password_len, &dbname, &dbname_len) == FAILURE) { @@ -623,7 +623,7 @@ PHP_FUNCTION(mysqli_change_user) MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); #if !defined(MYSQLI_USE_MYSQLND) && defined(HAVE_MYSQLI_SET_CHARSET) - old_charset = mysql->mysql->charset; + mysql_get_character_set_info(mysql->mysql, &old_charset); #endif #if defined(MYSQLI_USE_MYSQLND) @@ -643,7 +643,7 @@ PHP_FUNCTION(mysqli_change_user) 5.0 doesn't support it. Support added in 5.1.23 by fixing the following bug : Bug #30472 libmysql doesn't reset charset, insert_id after succ. mysql_change_user() call */ - rc = mysql_set_character_set(mysql->mysql, old_charset->csname); + rc = mysql_set_character_set(mysql->mysql, old_charset.csname); } #endif @@ -1716,10 +1716,12 @@ static int mysqli_options_get_option_zval_type(int option) #endif /* MySQL 4.1.0 */ case MYSQL_OPT_READ_TIMEOUT: case MYSQL_OPT_WRITE_TIMEOUT: +#ifdef MYSQL_OPT_GUESS_CONNECTION /* removed in MySQL-8.0 */ case MYSQL_OPT_GUESS_CONNECTION: case MYSQL_OPT_USE_EMBEDDED_CONNECTION: case MYSQL_OPT_USE_REMOTE_CONNECTION: case MYSQL_SECURE_AUTH: +#endif #ifdef MYSQL_OPT_RECONNECT case MYSQL_OPT_RECONNECT: #endif /* MySQL 5.0.13 */ diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 4736e4fcb2..0d4a1704cd 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -303,7 +303,8 @@ void mysqli_common_connect(INTERNAL_FUNCTION_PARAMETERS, zend_bool is_real_conne php_mysqli_set_error(mysql_errno(mysql->mysql), (char *) mysql_error(mysql->mysql)); #if !defined(MYSQLI_USE_MYSQLND) - mysql->mysql->reconnect = MyG(reconnect); + char reconnect = MyG(reconnect); + mysql_options(mysql->mysql, MYSQL_OPT_RECONNECT, (char *)&reconnect); #endif unsigned int allow_local_infile = MyG(allow_local_infile); mysql_options(mysql->mysql, MYSQL_OPT_LOCAL_INFILE, (char *)&allow_local_infile); diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index 1b7ffddb1a..e399ecaa36 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -58,8 +58,6 @@ #define HAVE_ULONG #endif -#include - #if !defined(HAVE_MBRLEN) && defined(WE_HAD_MBRLEN) #define HAVE_MBRLEN 1 #endif @@ -68,20 +66,12 @@ #define HAVE_MBSTATE_T 1 #endif -/* - We need more than mysql.h because we need CHARSET_INFO in one place. - This order has been borrowed from the ODBC driver. Nothing can be removed - from the list of headers :( -*/ - -#include #include +#ifndef my_bool +typedef char my_bool; +#endif #include -#include -#include #include -#include -#include #include "mysqli_libmysql.h" #endif /* MYSQLI_USE_MYSQLND */ -- cgit v1.2.1 From c9abb0c0ac8a9bce1d8d62e45dc3ff9fc9ea5308 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sat, 12 Sep 2020 15:29:23 +1000 Subject: mysql: native mysql-8.0 uses _Bool MySQL-8.0 removes option MYSQLI_OPT_SSL_VERIFY_SERVER_CERT --- ext/mysqli/mysqli.c | 2 +- ext/mysqli/php_mysqli_structs.h | 4 ++-- ext/pdo_mysql/php_pdo_mysql_int.h | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 73511b2639..bdab4b7d1e 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -686,7 +686,7 @@ PHP_MINIT_FUNCTION(mysqli) #ifdef MYSQLND_STRING_TO_INT_CONVERSION REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT); #endif -#if MYSQL_VERSION_ID > 50110 || defined(MYSQLI_USE_MYSQLND) +#if (MYSQL_VERSION_ID > 50110 && MYSQL_VERSION_ID < 80000) || (MYSQL_VERSION_ID >= 100000) || defined(MYSQLI_USE_MYSQLND) REGISTER_LONG_CONSTANT("MYSQLI_OPT_SSL_VERIFY_SERVER_CERT", MYSQL_OPT_SSL_VERIFY_SERVER_CERT, CONST_CS | CONST_PERSISTENT); #endif diff --git a/ext/mysqli/php_mysqli_structs.h b/ext/mysqli/php_mysqli_structs.h index e399ecaa36..143acbd5a1 100644 --- a/ext/mysqli/php_mysqli_structs.h +++ b/ext/mysqli/php_mysqli_structs.h @@ -67,8 +67,8 @@ #endif #include -#ifndef my_bool -typedef char my_bool; +#if MYSQL_VERSION_ID >= 80000 && MYSQL_VERSION_ID < 100000 +typedef _Bool my_bool; #endif #include #include diff --git a/ext/pdo_mysql/php_pdo_mysql_int.h b/ext/pdo_mysql/php_pdo_mysql_int.h index 486780acdc..e7cabeeb15 100644 --- a/ext/pdo_mysql/php_pdo_mysql_int.h +++ b/ext/pdo_mysql/php_pdo_mysql_int.h @@ -27,6 +27,9 @@ # define PDO_MYSQL_PARAM_BIND MYSQLND_PARAM_BIND #else # include +#if MYSQL_VERSION_ID >= 80000 && MYSQL_VERSION_ID < 100000 +typedef _Bool my_bool; +#endif # define PDO_MYSQL_PARAM_BIND MYSQL_BIND #endif -- cgit v1.2.1 From 1aab7db6c870441046007c792c7fc5ecdff2ea51 Mon Sep 17 00:00:00 2001 From: Daniel Black Date: Sun, 13 Sep 2020 14:09:49 +1000 Subject: pdo_mysql/mysqli (native) libmysqlclient_r no-longer used The mysqlclient_r library exists in mysql-5.6 for compatibility only. Later versions have it removed. --- ext/mysqli/config.m4 | 3 --- ext/pdo_mysql/config.m4 | 9 ++------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/ext/mysqli/config.m4 b/ext/mysqli/config.m4 index 38a130f4cd..7c02546266 100644 --- a/ext/mysqli/config.m4 +++ b/ext/mysqli/config.m4 @@ -57,9 +57,6 @@ elif test "$PHP_MYSQLI" != "no"; then MYSQL_LIB_CFG='--libmysqld-libs' dnl mysqlnd doesn't support embedded, so we have to add some extra stuff mysqli_extra_sources="mysqli_embedded.c" - elif test "$enable_maintainer_zts" = "yes"; then - MYSQL_LIB_CFG='--libs_r' - MYSQL_LIB_NAME='mysqlclient_r' else MYSQL_LIB_CFG='--libs' fi diff --git a/ext/pdo_mysql/config.m4 b/ext/pdo_mysql/config.m4 index 3e37a6adec..7efa814c54 100755 --- a/ext/pdo_mysql/config.m4 +++ b/ext/pdo_mysql/config.m4 @@ -66,13 +66,8 @@ if test "$PHP_PDO_MYSQL" != "no"; then if test "x$SED" = "x"; then AC_PATH_PROG(SED, sed) fi - if test "$enable_maintainer_zts" = "yes"; then - PDO_MYSQL_LIBNAME=mysqlclient_r - PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs_r | $SED -e "s/'//g"` - else - PDO_MYSQL_LIBNAME=mysqlclient - PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs | $SED -e "s/'//g"` - fi + PDO_MYSQL_LIBNAME=mysqlclient + PDO_MYSQL_LIBS=`$PDO_MYSQL_CONFIG --libs | $SED -e "s/'//g"` PDO_MYSQL_INCLUDE=`$PDO_MYSQL_CONFIG --cflags | $SED -e "s/'//g"` elif test -n "$PDO_MYSQL_DIR"; then AC_MSG_RESULT([not found]) -- cgit v1.2.1