Skip to content

Commit 5be5d1b

Browse files
committed
Stop reporting unhelpful values in mysqli_get_charset
1 parent f99ca63 commit 5be5d1b

9 files changed

+265
-297
lines changed

ext/mysqli/mysqli_nonapi.c

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -965,8 +965,8 @@ PHP_FUNCTION(mysqli_get_charset)
965965
{
966966
MY_MYSQL *mysql;
967967
zval *mysql_link;
968-
const char *name = NULL, *collation = NULL, *dir = NULL, *comment = NULL;
969-
uint32_t minlength, maxlength, number, state;
968+
const char *name = NULL, *collation = NULL;
969+
uint32_t minlength, maxlength;
970970
const MYSQLND_CHARSET *cs;
971971

972972
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
@@ -984,19 +984,16 @@ PHP_FUNCTION(mysqli_get_charset)
984984
collation = cs->collation;
985985
minlength = cs->char_minlen;
986986
maxlength = cs->char_maxlen;
987-
number = cs->nr;
988-
comment = cs->comment;
989-
state = 1; /* all charsets are compiled in */
990987
object_init(return_value);
991988

992989
add_property_string(return_value, "charset", (name) ? (char *)name : "");
993990
add_property_string(return_value, "collation",(collation) ? (char *)collation : "");
994-
add_property_string(return_value, "dir", (dir) ? (char *)dir : "");
991+
add_property_string(return_value, "dir", "");
995992
add_property_long(return_value, "min_length", minlength);
996993
add_property_long(return_value, "max_length", maxlength);
997-
add_property_long(return_value, "number", number);
998-
add_property_long(return_value, "state", state);
999-
add_property_string(return_value, "comment", (comment) ? (char *)comment : "");
994+
add_property_long(return_value, "number", 0);
995+
add_property_long(return_value, "state", 1);
996+
add_property_string(return_value, "comment", "");
1000997
}
1001998
/* }}} */
1002999

ext/mysqli/tests/mysqli_fetch_field.phpt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@ require_once 'skipifconnectfailure.inc';
3030
/* label column, result set charset */
3131
$tmp = mysqli_fetch_field($res);
3232
var_dump($tmp);
33-
if ($tmp->charsetnr != $charsetInfo->number) {
34-
printf("[004] Expecting charset %s/%d got %d\n",
35-
$charsetInfo->charset, $charsetInfo->number, $tmp->charsetnr);
36-
}
3733
if ($tmp->db != $db) {
3834
printf("011] Expecting database '%s' got '%s'\n",
3935
$db, $tmp->db);

ext/mysqli/tests/mysqli_fetch_field_oo.phpt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,6 @@ require_once 'skipifconnectfailure.inc';
2727

2828
$tmp = $res->fetch_field();
2929
var_dump($tmp);
30-
if ($tmp->charsetnr != $charsetInfo->number) {
31-
printf("[005] Expecting charset %s/%d got %d\n",
32-
$charsetInfo->charset, $charsetInfo->number, $tmp->charsetnr);
33-
}
3430
if ($tmp->db != $db) {
3531
printf("[007] Expecting database '%s' got '%s'\n",
3632
$db, $tmp->db);

ext/mysqli/tests/mysqli_fetch_fields.phpt

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,6 @@ require_once 'skipifconnectfailure.inc';
2626
$fields = mysqli_fetch_fields($res);
2727
foreach ($fields as $k => $field) {
2828
var_dump($field);
29-
switch ($k) {
30-
case 1:
31-
/* label column, result set charset */
32-
if ($field->charsetnr != $charsetInfo->number) {
33-
printf("[004] Expecting charset %s/%d got %d\n",
34-
$charsetInfo->charset,
35-
$charsetInfo->number, $field->charsetnr);
36-
}
37-
break;
38-
}
3929
}
4030

4131
mysqli_free_result($res);

ext/mysqli/tests/mysqli_field_seek.phpt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,6 @@ require_once 'skipifconnectfailure.inc';
8080
$field = mysqli_fetch_field($res);
8181
var_dump($field);
8282
/* label column, result set charset */
83-
if ($field->charsetnr != $charsetInfo->number) {
84-
printf("[004] Expecting charset %s/%d got %d\n",
85-
$charsetInfo->charset, $charsetInfo->number, $field->charsetnr);
86-
}
8783
if ($field->length != $charsetInfo->max_length) {
8884
printf("[005] Expecting length %d got %d\n",
8985
$charsetInfo->max_length, $field->max_length);

ext/mysqli/tests/mysqli_get_charset.phpt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@ require_once 'skipifconnectfailure.inc';
1515
exit(1);
1616
}
1717

18+
// On some servers the default collation is not what we expect,
19+
// so we need to set it explicitly to make sure that the test is deterministic.
20+
mysqli_set_charset($link, 'utf8mb4');
21+
if (!$res = mysqli_query($link, "SET NAMES utf8mb4 COLLATE 'utf8mb4_general_ci'"))
22+
printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
23+
1824
if (!$res = mysqli_query($link, 'SELECT @@character_set_connection AS charset, @@collation_connection AS collation'))
1925
printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
2026
$tmp = mysqli_fetch_assoc($res);
@@ -27,13 +33,6 @@ require_once 'skipifconnectfailure.inc';
2733
if (!mysqli_fetch_assoc($res))
2834
printf("[010] Cannot fetch Maxlen and/or Comment, test will fail: $sql\n");
2935

30-
if (!$res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $collation_connection)))
31-
printf("[011] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
32-
$tmp = mysqli_fetch_assoc($res);
33-
mysqli_free_result($res);
34-
if (!($id = $tmp['Id']))
35-
printf("[012] Cannot fetch Id/Number, test will fail\n");
36-
3736
if (!$res = mysqli_query($link, sprintf("SHOW VARIABLES LIKE 'character_sets_dir'")))
3837
printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
3938
$tmp = mysqli_fetch_assoc($res);
@@ -66,8 +65,8 @@ require_once 'skipifconnectfailure.inc';
6665

6766
if (!isset($charset->number) ||
6867
!is_int($charset->number) ||
69-
($charset->number !== (int)$id))
70-
printf("[021] Expecting int/%d, got %s/%s\n", $id, gettype($charset->number), $charset->number);
68+
($charset->number !== 0))
69+
printf("[021] Expecting int/%d, got %s/%s\n", 0, gettype($charset->number), $charset->number);
7170

7271
if (!isset($charset->state) ||
7372
!is_int($charset->state))

ext/mysqli/tests/mysqli_stmt_get_result_metadata_fetch_field.phpt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@ require_once 'skipifconnectfailure.inc';
4242
Label column, result set charset.
4343
All of the following columns are "too hot" - too server dependent
4444
*/
45-
if ($field->charsetnr != $charsetInfo->number) {
46-
printf("[004] Expecting charset %s/%d got %d\n",
47-
$charsetInfo->charset,
48-
$charsetInfo->number, $field->charsetnr);
49-
}
5045
if ($field->length != $charsetInfo->max_length) {
5146
printf("[005] Expecting length %d got %d\n",
5247
$charsetInfo->max_length, $field->max_length);

0 commit comments

Comments
 (0)