summaryrefslogtreecommitdiff
path: root/ext/mysql
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2010-10-21 08:52:46 +0200
committerOndřej Surý <ondrej@sury.org>2010-10-21 08:52:46 +0200
commit01fcdff3849c3691d9aaeaab735846ab6d8895ca (patch)
tree6460876d356113fa7053df36f2aa00baa7db24a9 /ext/mysql
parent855a09f4eded707941180c9d90acd17c25e29447 (diff)
downloadphp-upstream/5.3.3.tar.gz
Imported Upstream version 5.3.3upstream/5.3.3
Diffstat (limited to 'ext/mysql')
-rw-r--r--ext/mysql/php_mysql.c295
-rw-r--r--ext/mysql/tests/bug51242.phpt38
-rwxr-xr-xext/mysql/tests/connect.inc4
-rw-r--r--ext/mysql/tests/mysql_constants.phpt2
-rw-r--r--ext/mysql/tests/mysql_fetch_array.phpt7
-rw-r--r--ext/mysql/tests/mysql_fetch_field.phpt13
-rw-r--r--ext/mysql/tests/mysql_query_load_data_openbasedir.phpt1
-rw-r--r--ext/mysql/tests/skipifnotmysqlnd.inc5
8 files changed, 245 insertions, 120 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
index 28d4d8ec5..d8b67a44d 100644
--- a/ext/mysql/php_mysql.c
+++ b/ext/mysql/php_mysql.c
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mysql.c 294891 2010-02-11 17:14:44Z johannes $ */
+/* $Id: php_mysql.c 300792 2010-06-28 01:19:08Z felipe $ */
/* TODO:
*
@@ -135,90 +135,191 @@ typedef struct _php_mysql_conn {
#define MYSQL_DISABLE_MQ
#endif
+/* {{{ arginfo */
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_connect, 0, 0, 0)
+ ZEND_ARG_INFO(0, hostname)
+ ZEND_ARG_INFO(0, username)
+ ZEND_ARG_INFO(0, password)
+ ZEND_ARG_INFO(0, new)
+ ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_pconnect, 0, 0, 0)
+ ZEND_ARG_INFO(0, hostname)
+ ZEND_ARG_INFO(0, username)
+ ZEND_ARG_INFO(0, password)
+ ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo__optional_mysql_link, 0, 0, 0)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_select_db, 0, 0, 1)
+ ZEND_ARG_INFO(0, database_name)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO(arginfo__void_mysql_arg, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_set_charset, 0, 0, 1)
+ ZEND_ARG_INFO(0, charset_name)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_query, 0, 0, 1)
+ ZEND_ARG_INFO(0, query)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_db_query, 0, 0, 2)
+ ZEND_ARG_INFO(0, database_name)
+ ZEND_ARG_INFO(0, query)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_list_fields, 0, 0, 2)
+ ZEND_ARG_INFO(0, database_name)
+ ZEND_ARG_INFO(0, table_name)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_escape_string, 0, 0, 1)
+ ZEND_ARG_INFO(0, string)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_real_escape_string, 0, 0, 1)
+ ZEND_ARG_INFO(0, string)
+ ZEND_ARG_INFO(0, link_identifier)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_result, 0, 0, 2)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, row)
+ ZEND_ARG_INFO(0, field)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo__result_mysql_arg, 0, 0, 1)
+ ZEND_ARG_INFO(0, result)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_fetch_object, 0, 0, 1)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, class_name)
+ ZEND_ARG_INFO(0, ctor_params)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_fetch_array, 0, 0, 1)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, result_type)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_data_seek, 0, 0, 2)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, row_number)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_fetch_field, 0, 0, 1)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, field_offset)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_field_seek, 0, 0, 2)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, field_offset)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mysql_field_name, 0, 0, 2)
+ ZEND_ARG_INFO(0, result)
+ ZEND_ARG_INFO(0, field_index)
+ZEND_END_ARG_INFO()
+/* }}} */
+
/* {{{ mysql_functions[]
*/
static const zend_function_entry mysql_functions[] = {
- PHP_FE(mysql_connect, NULL)
- PHP_FE(mysql_pconnect, NULL)
- PHP_FE(mysql_close, NULL)
- PHP_FE(mysql_select_db, NULL)
+ PHP_FE(mysql_connect, arginfo_mysql_connect)
+ PHP_FE(mysql_pconnect, arginfo_mysql_pconnect)
+ PHP_FE(mysql_close, arginfo__optional_mysql_link)
+ PHP_FE(mysql_select_db, arginfo_mysql_select_db)
#ifndef NETWARE /* The below two functions not supported on NetWare */
#if MYSQL_VERSION_ID < 40000
- PHP_DEP_FE(mysql_create_db, NULL)
- PHP_DEP_FE(mysql_drop_db, NULL)
+ PHP_DEP_FE(mysql_create_db, arginfo_mysql_select_db)
+ PHP_DEP_FE(mysql_drop_db, arginfo_mysql_select_db)
#endif
#endif /* NETWARE */
- PHP_FE(mysql_query, NULL)
- PHP_FE(mysql_unbuffered_query, NULL)
- PHP_FE(mysql_db_query, NULL)
- PHP_FE(mysql_list_dbs, NULL)
- PHP_DEP_FE(mysql_list_tables, NULL)
- PHP_FE(mysql_list_fields, NULL)
- PHP_FE(mysql_list_processes, NULL)
- PHP_FE(mysql_error, NULL)
+ PHP_FE(mysql_query, arginfo_mysql_query)
+ PHP_FE(mysql_unbuffered_query, arginfo_mysql_query)
+ PHP_FE(mysql_db_query, arginfo_mysql_db_query)
+ PHP_FE(mysql_list_dbs, arginfo__optional_mysql_link)
+ PHP_DEP_FE(mysql_list_tables, arginfo_mysql_select_db)
+ PHP_FE(mysql_list_fields, arginfo_mysql_list_fields)
+ PHP_FE(mysql_list_processes, arginfo__optional_mysql_link)
+ PHP_FE(mysql_error, arginfo__optional_mysql_link)
#ifdef HAVE_MYSQL_ERRNO
- PHP_FE(mysql_errno, NULL)
-#endif
- PHP_FE(mysql_affected_rows, NULL)
- PHP_FE(mysql_insert_id, NULL)
- PHP_FE(mysql_result, NULL)
- PHP_FE(mysql_num_rows, NULL)
- PHP_FE(mysql_num_fields, NULL)
- PHP_FE(mysql_fetch_row, NULL)
- PHP_FE(mysql_fetch_array, NULL)
- PHP_FE(mysql_fetch_assoc, NULL)
- PHP_FE(mysql_fetch_object, NULL)
- PHP_FE(mysql_data_seek, NULL)
- PHP_FE(mysql_fetch_lengths, NULL)
- PHP_FE(mysql_fetch_field, NULL)
- PHP_FE(mysql_field_seek, NULL)
- PHP_FE(mysql_free_result, NULL)
- PHP_FE(mysql_field_name, NULL)
- PHP_FE(mysql_field_table, NULL)
- PHP_FE(mysql_field_len, NULL)
- PHP_FE(mysql_field_type, NULL)
- PHP_FE(mysql_field_flags, NULL)
- PHP_FE(mysql_escape_string, NULL)
- PHP_FE(mysql_real_escape_string, NULL)
- PHP_FE(mysql_stat, NULL)
- PHP_FE(mysql_thread_id, NULL)
- PHP_FE(mysql_client_encoding, NULL)
- PHP_FE(mysql_ping, NULL)
+ PHP_FE(mysql_errno, arginfo__optional_mysql_link)
+#endif
+ PHP_FE(mysql_affected_rows, arginfo__optional_mysql_link)
+ PHP_FE(mysql_insert_id, arginfo__optional_mysql_link)
+ PHP_FE(mysql_result, arginfo_mysql_result)
+ PHP_FE(mysql_num_rows, arginfo__result_mysql_arg)
+ PHP_FE(mysql_num_fields, arginfo__result_mysql_arg)
+ PHP_FE(mysql_fetch_row, arginfo__result_mysql_arg)
+ PHP_FE(mysql_fetch_array, arginfo_mysql_fetch_array)
+ PHP_FE(mysql_fetch_assoc, arginfo__result_mysql_arg)
+ PHP_FE(mysql_fetch_object, arginfo_mysql_fetch_object)
+ PHP_FE(mysql_data_seek, arginfo_mysql_data_seek)
+ PHP_FE(mysql_fetch_lengths, arginfo__result_mysql_arg)
+ PHP_FE(mysql_fetch_field, arginfo_mysql_fetch_field)
+ PHP_FE(mysql_field_seek, arginfo_mysql_field_seek)
+ PHP_FE(mysql_free_result, arginfo__result_mysql_arg)
+ PHP_FE(mysql_field_name, arginfo_mysql_field_name)
+ PHP_FE(mysql_field_table, arginfo_mysql_field_seek)
+ PHP_FE(mysql_field_len, arginfo_mysql_field_seek)
+ PHP_FE(mysql_field_type, arginfo_mysql_field_seek)
+ PHP_FE(mysql_field_flags, arginfo_mysql_field_seek)
+ PHP_FE(mysql_escape_string, arginfo_mysql_escape_string)
+ PHP_FE(mysql_real_escape_string, arginfo_mysql_real_escape_string)
+ PHP_FE(mysql_stat, arginfo__optional_mysql_link)
+ PHP_FE(mysql_thread_id, arginfo__optional_mysql_link)
+ PHP_FE(mysql_client_encoding, arginfo__optional_mysql_link)
+ PHP_FE(mysql_ping, arginfo__optional_mysql_link)
#ifdef HAVE_GETINFO_FUNCS
- PHP_FE(mysql_get_client_info, NULL)
- PHP_FE(mysql_get_host_info, NULL)
- PHP_FE(mysql_get_proto_info, NULL)
- PHP_FE(mysql_get_server_info, NULL)
+ PHP_FE(mysql_get_client_info, arginfo__void_mysql_arg)
+ PHP_FE(mysql_get_host_info, arginfo__optional_mysql_link)
+ PHP_FE(mysql_get_proto_info, arginfo__optional_mysql_link)
+ PHP_FE(mysql_get_server_info, arginfo__optional_mysql_link)
#endif
- PHP_FE(mysql_info, NULL)
+ PHP_FE(mysql_info, arginfo__optional_mysql_link)
#ifdef MYSQL_HAS_SET_CHARSET
- PHP_FE(mysql_set_charset, NULL)
+ PHP_FE(mysql_set_charset, arginfo_mysql_set_charset)
#endif
/* for downwards compatability */
- PHP_FALIAS(mysql, mysql_db_query, NULL)
- PHP_FALIAS(mysql_fieldname, mysql_field_name, NULL)
- PHP_FALIAS(mysql_fieldtable, mysql_field_table, NULL)
- PHP_FALIAS(mysql_fieldlen, mysql_field_len, NULL)
- PHP_FALIAS(mysql_fieldtype, mysql_field_type, NULL)
- PHP_FALIAS(mysql_fieldflags, mysql_field_flags, NULL)
- PHP_FALIAS(mysql_selectdb, mysql_select_db, NULL)
+ PHP_FALIAS(mysql, mysql_db_query, arginfo_mysql_db_query)
+ PHP_FALIAS(mysql_fieldname, mysql_field_name, arginfo_mysql_field_name)
+ PHP_FALIAS(mysql_fieldtable, mysql_field_table, arginfo_mysql_field_seek)
+ PHP_FALIAS(mysql_fieldlen, mysql_field_len, arginfo_mysql_field_seek)
+ PHP_FALIAS(mysql_fieldtype, mysql_field_type, arginfo_mysql_field_seek)
+ PHP_FALIAS(mysql_fieldflags, mysql_field_flags, arginfo_mysql_field_seek)
+ PHP_FALIAS(mysql_selectdb, mysql_select_db, arginfo_mysql_select_db)
#ifndef NETWARE /* The below two functions not supported on NetWare */
#if MYSQL_VERSION_ID < 40000
- PHP_DEP_FALIAS(mysql_createdb, mysql_create_db, NULL)
- PHP_DEP_FALIAS(mysql_dropdb, mysql_drop_db, NULL)
+ PHP_DEP_FALIAS(mysql_createdb, mysql_create_db, arginfo_mysql_select_db)
+ PHP_DEP_FALIAS(mysql_dropdb, mysql_drop_db, arginfo_mysql_select_db)
#endif
#endif /* NETWARE */
- PHP_FALIAS(mysql_freeresult, mysql_free_result, NULL)
- PHP_FALIAS(mysql_numfields, mysql_num_fields, NULL)
- PHP_FALIAS(mysql_numrows, mysql_num_rows, NULL)
- PHP_FALIAS(mysql_listdbs, mysql_list_dbs, NULL)
- PHP_DEP_FALIAS(mysql_listtables,mysql_list_tables, NULL)
- PHP_FALIAS(mysql_listfields, mysql_list_fields, NULL)
- PHP_FALIAS(mysql_db_name, mysql_result, NULL)
- PHP_FALIAS(mysql_dbname, mysql_result, NULL)
- PHP_FALIAS(mysql_tablename, mysql_result, NULL)
- PHP_FALIAS(mysql_table_name, mysql_result, NULL)
+ PHP_FALIAS(mysql_freeresult, mysql_free_result, arginfo__result_mysql_arg)
+ PHP_FALIAS(mysql_numfields, mysql_num_fields, arginfo__result_mysql_arg)
+ PHP_FALIAS(mysql_numrows, mysql_num_rows, arginfo__result_mysql_arg)
+ PHP_FALIAS(mysql_listdbs, mysql_list_dbs, arginfo__optional_mysql_link)
+ PHP_DEP_FALIAS(mysql_listtables,mysql_list_tables, arginfo_mysql_select_db)
+ PHP_FALIAS(mysql_listfields, mysql_list_fields, arginfo_mysql_list_fields)
+ PHP_FALIAS(mysql_db_name, mysql_result, arginfo_mysql_result)
+ PHP_FALIAS(mysql_dbname, mysql_result, arginfo_mysql_result)
+ PHP_FALIAS(mysql_tablename, mysql_result, arginfo_mysql_result)
+ PHP_FALIAS(mysql_table_name, mysql_result, arginfo_mysql_result)
{NULL, NULL, NULL}
};
/* }}} */
@@ -664,7 +765,11 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
}
/* disable local infile option for open_basedir */
+#if PHP_API_VERSION < 20100412
if (((PG(open_basedir) && PG(open_basedir)[0] != '\0') || PG(safe_mode)) && (client_flags & CLIENT_LOCAL_FILES)) {
+#else
+ if ((PG(open_basedir) && PG(open_basedir)[0] != '\0') && (client_flags & CLIENT_LOCAL_FILES)) {
+#endif
client_flags ^= CLIENT_LOCAL_FILES;
}
@@ -855,9 +960,17 @@ static void php_mysql_do_connect(INTERNAL_FUNCTION_PARAMETERS, int persistent)
#else
mysql->conn = mysql_init(persistent);
#endif
+ if (!mysql->conn) {
+ MySG(connect_error) = estrdup("OOM");
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "OOM");
+ efree(hashed_details);
+ efree(mysql);
+ MYSQL_DO_CONNECT_RETURN_FALSE();
+ }
- if (connect_timeout != -1)
- mysql_options(mysql->conn, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout);
+ if (connect_timeout != -1) {
+ mysql_options(mysql->conn, MYSQL_OPT_CONNECT_TIMEOUT, (const char *)&connect_timeout);
+ }
#ifndef MYSQL_USE_MYSQLND
if (mysql_real_connect(mysql->conn, host, user, passwd, NULL, port, socket, client_flags)==NULL)
@@ -1989,7 +2102,7 @@ static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type,
}
}
#else
- mysqlnd_fetch_into(mysql_result, MYSQLND_FETCH_ASSOC, return_value, MYSQLND_MYSQL);
+ mysqlnd_fetch_into(mysql_result, ((result_type & MYSQL_NUM)? MYSQLND_FETCH_NUM:0) | ((result_type & MYSQL_ASSOC)? MYSQLND_FETCH_ASSOC:0), return_value, MYSQLND_MYSQL);
#endif
#ifdef ZEND_ENGINE_2
@@ -2067,19 +2180,7 @@ static void php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type,
Gets a result row as an enumerated array */
PHP_FUNCTION(mysql_fetch_row)
{
-#ifdef MYSQL_USE_MYSQLND
- MYSQL_RES *result;
- zval *mysql_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "MySQL result", le_result);
-
- mysqlnd_fetch_into(result, MYSQLND_FETCH_NUM, return_value, MYSQLND_MYSQL);
-#else
php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_NUM, 1, 0);
-#endif
}
/* }}} */
@@ -2101,25 +2202,7 @@ PHP_FUNCTION(mysql_fetch_object)
Fetch a result row as an array (associative, numeric or both) */
PHP_FUNCTION(mysql_fetch_array)
{
-#ifndef MYSQL_USE_MYSQLND
php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0, 2, 0);
-#else
- MYSQL_RES *result;
- zval *mysql_result;
- long mode = MYSQLND_FETCH_BOTH;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|l", &mysql_result, &mode) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "MySQL result", le_result);
-
- if (mode & ~MYSQL_BOTH) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "The result type should be either MYSQL_NUM, MYSQL_ASSOC or MYSQL_BOTH");
- mode = MYSQL_BOTH;
- }
-
- mysqlnd_fetch_into(result, mode, return_value, MYSQLND_MYSQL);
-#endif
}
/* }}} */
@@ -2128,19 +2211,7 @@ PHP_FUNCTION(mysql_fetch_array)
Fetch a result row as an associative array */
PHP_FUNCTION(mysql_fetch_assoc)
{
-#ifndef MYSQL_USE_MYSQLND
php_mysql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MYSQL_ASSOC, 1, 0);
-#else
- MYSQL_RES *result;
- zval *mysql_result;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &mysql_result) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(result, MYSQL_RES *, &mysql_result, -1, "MySQL result", le_result);
-
- mysqlnd_fetch_into(result, MYSQLND_FETCH_ASSOC, return_value, MYSQLND_MYSQL);
-#endif
}
/* }}} */
diff --git a/ext/mysql/tests/bug51242.phpt b/ext/mysql/tests/bug51242.phpt
new file mode 100644
index 000000000..9b62cdb4c
--- /dev/null
+++ b/ext/mysql/tests/bug51242.phpt
@@ -0,0 +1,38 @@
+--TEST--
+Bug #51242 (Empty mysql.default_port does not default to 3306 anymore, but 0)
+--INI--
+mysql.default_port=
+mysql.default_socket=/this/does/not/really/need/to/exist
+--SKIPIF--
+<?php
+require_once('skipif.inc');
+require_once('skipifnotmysqlnd.inc');
+
+// Specific to this bug: we need to be able to connect via TCP. We'll use
+// 127.0.0.1:3306 as a (hopefully) moderately sensible default if the hostname
+// is actually specified as localhost.
+if ($host == 'localhost') {
+ $host = '127.0.0.1';
+}
+
+if (!@mysql_connect("$host:3306", $user, $passwd)) {
+ die("skip mysql not available at $host:3306");
+}
+?>
+--FILE--
+<?php
+require_once('connect.inc');
+
+if ($host == 'localhost') {
+ $host = '127.0.0.1';
+}
+
+if ($link = my_mysql_connect($host, $user, $passwd, $db, null, $socket)) {
+ var_dump($link);
+} else {
+ printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
+ $host, $user, $db, null, $socket);
+}
+?>
+--EXPECTF--
+resource(%d) of type (mysql link)
diff --git a/ext/mysql/tests/connect.inc b/ext/mysql/tests/connect.inc
index b5cc03ecb..97fed4214 100755
--- a/ext/mysql/tests/connect.inc
+++ b/ext/mysql/tests/connect.inc
@@ -69,7 +69,9 @@ $engine = getenv("MYSQL_TEST_ENGINE") ? getenv("MYSQL_TEST_ENGINE") : "MyISAM";
$socket = getenv("MYSQL_TEST_SOCKET") ? getenv("MYSQL_TEST_SOCKET") : null;
$skip_on_connect_failure = getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") ? getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") : true;
$connect_flags = getenv("MYSQL_TEST_CONNECT_FLAGS") ? (int)getenv("MYSQL_TEST_CONNECT_FLAGS") : 0;
-
+if ($socket) {
+ ini_set('mysql.default_user', $socket);
+}
/* Development setting: test experimal features and/or feature requests that never worked before? */
$TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
diff --git a/ext/mysql/tests/mysql_constants.phpt b/ext/mysql/tests/mysql_constants.phpt
index e88e6556f..134610020 100644
--- a/ext/mysql/tests/mysql_constants.phpt
+++ b/ext/mysql/tests/mysql_constants.phpt
@@ -38,7 +38,7 @@ $unexpected_constants = array();
foreach ($constants as $group => $consts) {
foreach ($consts as $name => $value) {
- if (stristr($name, 'mysql') && !stristr($name, 'mysqli')) {
+ if (stristr($name, 'mysql') && !preg_match("/^mysql([^_]+)_/iu", $name)) {
$name = strtoupper($name);
if (isset($expected_constants[$name])) {
unset($expected_constants[$name]);
diff --git a/ext/mysql/tests/mysql_fetch_array.phpt b/ext/mysql/tests/mysql_fetch_array.phpt
index 635e6d109..362cf99dd 100644
--- a/ext/mysql/tests/mysql_fetch_array.phpt
+++ b/ext/mysql/tests/mysql_fetch_array.phpt
@@ -50,7 +50,7 @@ mysql_free_result($res);
if (!$res = mysql_query("SELECT 1 AS a, 2 AS b, 3 AS c, 4 AS C", $link)) {
printf("[012] Cannot run query, [%d] %s\n",
mysql_errno($link), $mysql_error($link));
-exit(1);
+ exit(1);
}
do {
@@ -76,7 +76,6 @@ function func_mysql_fetch_array($link, $engine, $sql_type, $sql_value, $php_valu
}
if (!mysql_query($sql = sprintf("CREATE TABLE test(id INT NOT NULL, label %s, PRIMARY KEY(id)) ENGINE = %s", $sql_type, $engine), $link)) {
- print $sql;
// don't bail, engine might not support the datatype
return false;
}
@@ -225,11 +224,11 @@ func_mysql_fetch_array($link, $engine, "CHAR(255)", $string255, $string255, 550
func_mysql_fetch_array($link, $engine, "CHAR(1) NOT NULL", "a", "a", 560);
func_mysql_fetch_array($link, $engine, "CHAR(1)", NULL, NULL, 570);
-$string65k = func_mysql_fetch_array_make_string(65535);
+$string65k = func_mysql_fetch_array_make_string(65400);
func_mysql_fetch_array($link, $engine, "VARCHAR(1)", "a", "a", 580);
func_mysql_fetch_array($link, $engine, "VARCHAR(255)", $string255, $string255, 590);
-func_mysql_fetch_array($link, $engine, "VARCHAR(65635)", $string65k, $string65k, 600);
+func_mysql_fetch_array($link, $engine, "VARCHAR(65400)", $string65k, $string65k, 600);
func_mysql_fetch_array($link, $engine, "VARCHAR(1) NOT NULL", "a", "a", 610);
func_mysql_fetch_array($link, $engine, "VARCHAR(1)", NULL, NULL, 620);
diff --git a/ext/mysql/tests/mysql_fetch_field.phpt b/ext/mysql/tests/mysql_fetch_field.phpt
index 65c44edc5..ef0327908 100644
--- a/ext/mysql/tests/mysql_fetch_field.phpt
+++ b/ext/mysql/tests/mysql_fetch_field.phpt
@@ -51,6 +51,7 @@ require_once('skipifconnectfailure.inc');
'BIT' => array(1, 'int'),
'TINYINT' => array(1, 'int'),
'BOOL' => array('true', 'int'),
+ 'BOOL' => array(1, 'int'),
'SMALLINT' => array(32767, 'int'),
'MEDIUMINT' => array(8388607, 'int'),
'INT' => array(100, 'int'),
@@ -86,7 +87,17 @@ require_once('skipifconnectfailure.inc');
// server and/or engine might not support the data type
continue;
}
- if (!mysql_query(sprintf("INSERT INTO test(id, label) VALUES (1, '%s')", $type_desc[0]), $link)) {
+
+ if (is_string($type_desc[0]))
+ $insert = sprintf("INSERT INTO test(id, label) VALUES (1, '%s')", $type_desc[0]);
+ else
+ $insert = sprintf("INSERT INTO test(id, label) VALUES (1, %s)", $type_desc[0]);
+
+ if (!mysql_query($insert, $link)) {
+ if (1366 == mysql_errno($link)) {
+ /* Strict SQL mode - 1366, Incorrect integer value: 'true' for column 'label' at row 1 */
+ continue;
+ }
printf("[009/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
continue;
}
diff --git a/ext/mysql/tests/mysql_query_load_data_openbasedir.phpt b/ext/mysql/tests/mysql_query_load_data_openbasedir.phpt
index a257f5fb8..ff62f4227 100644
--- a/ext/mysql/tests/mysql_query_load_data_openbasedir.phpt
+++ b/ext/mysql/tests/mysql_query_load_data_openbasedir.phpt
@@ -26,7 +26,6 @@ if ($socket == "" && $host != NULL && $host != 'localhost' && $host != '.') {
}
?>
--INI--
-safe_mode=0
open_basedir="."
--FILE--
<?php
diff --git a/ext/mysql/tests/skipifnotmysqlnd.inc b/ext/mysql/tests/skipifnotmysqlnd.inc
new file mode 100644
index 000000000..9cccdc7bf
--- /dev/null
+++ b/ext/mysql/tests/skipifnotmysqlnd.inc
@@ -0,0 +1,5 @@
+<?php
+if (strpos(mysql_get_client_info(), 'mysqlnd') === false) {
+ die('skip mysqlnd extension not available');
+}
+?>