ID:               49216
 User updated by:  virgilp at gmail dot com
 Reported By:      virgilp at gmail dot com
 Status:           Open
 Bug Type:         MySQLi related
 Operating System: Windows XP SP3
 PHP Version:      5.2.10
 New Comment:

I found something interesting.
As it turns out, you may need to "refine" the php.net site... the code

written there seems to be no good, according to your latest feedback -

because it works just like my example:
http://www.php.net/~helly/classbrowser/class.php?
class=mysqli_stmt&extension=mysqli

And there are others, too, for instance this one:
http://www.php.net/~helly/classbrowser/class.php?
class=DOMErrorHandler&extension=dom
(probably not a reflection bug either, just an unrefined "class.php" 
page)


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

[2009-09-09 17:26:37] virgilp at gmail dot com

Oh, and about your supposition that I need an actual object... that's 
not true, either. Try this:
=======================
$mysqli = mysqli_init();
if (!$mysqli) {
    die('mysqli_init failed');
}

if (!$mysqli->options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
    die('Setting MYSQLI_INIT_COMMAND failed');
}

PrintParams('MySqli','options');
======================

With the PrintParams function being the one from my previous example. 
I get the following output:
-----------------------
$ php.exe d.php
MySqli::options():
-----------------------

Surprise-surprise, it does get to PrintParams (meaning that it doesn't

die, and I did successfully create a MySqli object). But what do you 
know, the "options" function still shows as being one with no 
parameters. So maybe they were optional parameters? Nope, this is what 

I get if I give no parameters:

Warning: mysqli::options() expects exactly 2 parameters, 0 given

As it turns out, it doesn't matter if you created one MySqli object...

the reflection is still buggy.

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

[2009-09-09 17:20:30] virgilp at gmail dot com

Just to clarify - the previous program shows the following results on 
my machine:
====================================================
MySqli_stmt::bind_param():
Parameter #0 [ <required> $param0 ] :
SoapClient::__call():
Parameter #0 [ <required> $param0 ] :
Parameter #1 [ <required> $param1 ] :
SoapClient::__soapCall():
Parameter #0 [ <required> $function_name ] : function_name
Parameter #1 [ <required> $arguments ] : arguments
Parameter #2 [ <optional> $options ] : options
Parameter #3 [ <optional> $input_headers ] : input_headers
Parameter #4 [ <optional> &$output_headers ] : output_headers
===============================================

Notice that bind_param, as well as SoapClient::__call do not return 
any "name" for the parameters (although printing the parameter 
directly will show a name). In contrast with that - _soapCall will 
correctly show the names

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

[2009-09-09 17:10:40] virgilp at gmail dot com

1. You forgot about the "protected class" mysqli_warning.

2. Then run the following program, and explain its results. I added 
mysqli_stmt only for reference, so that you see the similarity:

<?
function PrintParams($classname, $methodname){
   $class = new ReflectionClass($classname);
   $method= $class->getMethod($methodname);
    echo "$classname::$methodname():\n";
   $parameters = $method->getParameters();
  foreach ($parameter as $param)
  {
    echo "$param : ".$param->getName()." \n";

  }
}

PrintParams('MySqli_stmt','bind_param');
PrintParams('SoapClient','__call');
PrintParams('SoapClient','__soapCall');

?>

3. furthermore - new reflection issues, not really related to MySqli: 
a bunch of interfaces have no extension associated. For example try 
php.exe --rc RecursiveIterator -you'll see that it prints 
<internal:SPL> (which is probably correct). But php.exe --rc Iterator,

or php.exe --rc ArrayAccess will print only <internal>. 
Coincidentally, this means that you can't find the "Iterator" 
interface in any extension (e.g. using 
ReflectionExtesions::GetClasses) - IMO, it should be either in "SPL" 
or in "standard", but not completely "missing".

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

[2009-09-02 19:25:29] [email protected]

host_info and such is only there when you actually have connected 
somewhere. How about you refine your report and try with an actual 
object first?

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

[2009-08-12 07:04:06] virgilp at gmail dot com

I tried 
http://windows.php.net/downloads/snaps/php-5.2-nts-win32-VC6-x86-
latest.zip - I get the same behaviour

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

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/49216

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

Reply via email to