ID:               49965
 Updated by:       u...@php.net
 Reported By:      ed at bellcpa dot com
-Status:           Assigned
+Status:           Closed
 Bug Type:         MySQLi related
 Operating System: *
 PHP Version:      5.*, 6.*
 Assigned To:      mysql
 New Comment:

This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------

[2009-11-03 14:56:04] s...@php.net

Automatic comment from SVN on behalf of uw
Revision: http://svn.php.net/viewvc/?view=revision&revision=290170
Log: Fix for bug #49965 . Let mysqli_options() try to cast option
values to the appropriate type.

------------------------------------------------------------------------

[2009-10-29 18:19:45] u...@php.net

I discussed this with Andrey. We propose to change ext/mysqli to cast
$value passed to mysqli_options to an appropriate type internally. Old
code should not notice the change because it should be using an
appropriate type for $value in mysqli_options($link, $option, $value)
already.

I'll soon patch ext/mysqli.



------------------------------------------------------------------------

[2009-10-28 23:58:12] ed at bellcpa dot com

Ah, makes perfect sense. Glad it wasn't something more serious and
sorry for the oversight. Enclosing my option value in intval() solved it
as expected.

Thanks!

------------------------------------------------------------------------

[2009-10-28 23:48:10] u...@php.net

Hi Ed,

thanks for the additional information given in a private mail.

Yes, it matters what type the option value has that you pass to
mysqli_options(). It matters ever since 5.0. It is irrelevant if you use
mysqlnd or libmysql.

mysqli_options(mysqli $link, int $option, mixed $value) inspects the
type of the $value parameter. If you pass a string value, as stated in
your private mail, ext/mysqli forwards a string to mysqlnd resp.
libmysql. Both mysqlnd and libmysql expect that the data they get is of
the appropriate type for $option allowing them to use a simple cast to
interpret the data. 

String is not the appropriate type for MYSQLI_OPT_CONNECT_TIMEOUT - the
cast inside mysqlnd/libmysql causes a bogus value to be used...

This will not work:

 $timeout = "5"
 mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, $timeout);
 mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, "5");

You must use the following:

 $timeout = 5;
 mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, $timeout);
 mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5);



------------------------------------------------------------------------

[2009-10-28 17:52:26] u...@php.net

Interesting. I assume it does not matter if you use 5.3.0 or
5.3.2-dev?

Thanks so far!
Ulf

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/49965

-- 
Edit this bug report at http://bugs.php.net/?id=49965&edit=1

Reply via email to