mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
In the past, when libmysqlclient could be used, it accepted ipv6 addresses as hostname without enclosing it first in brackets. However, in mysqlnd this never worked. In the past this caused a discrepancy between the two implementations. Nowadays, mysqli only works with mysqlnd so we don't even have to cater to libmysqlclient. However, a plain ipv6 address should still work as a hostname. Also for people migrating to newer PHP versions it's nice if this keeps working. The solution is to check if we're dealing with an ipv6 address not yet enclosed in brackets. In that case we add the brackets automatically. Closes GH-19750.
41 lines
1.0 KiB
PHP
41 lines
1.0 KiB
PHP
--TEST--
|
|
Fix bug #67563 (mysqli compiled with mysqlnd does not take ipv6 adress as parameter)
|
|
--EXTENSIONS--
|
|
mysqli
|
|
--SKIPIF--
|
|
<?php
|
|
require_once 'connect.inc';
|
|
|
|
if ($host !== '127.0.0.1')
|
|
die('skip local test');
|
|
|
|
if (@stream_socket_client('udp://[::1]:8888') === false)
|
|
die('skip no IPv6 support 2');
|
|
|
|
if (!$link = @my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
|
|
die(sprintf("SKIP Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
|
|
$host, $user, $db, $port, $socket));
|
|
}
|
|
?>
|
|
--INI--
|
|
max_execution_time=240
|
|
--FILE--
|
|
<?php
|
|
require_once 'connect.inc';
|
|
|
|
$hosts = ['::1', "[::1]:$port"];
|
|
|
|
foreach ($hosts as $host) {
|
|
if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket)) {
|
|
printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=%s dbname=%s, port=%s, socket=%s\n",
|
|
$host, $user, $passwd, $db, $port, $socket);
|
|
} else {
|
|
$link->close();
|
|
}
|
|
}
|
|
|
|
print "done!";
|
|
?>
|
|
--EXPECT--
|
|
done!
|