ID: 43866
User updated by: basilio dot vera at softonic dot com
Reported By: basilio dot vera at softonic dot com
Status: Open
Bug Type: MySQLi related
Operating System: Linux RHEL4
PHP Version: 5.2.5
New Comment:
For example with an example inside the mysqli_init() or
mysqli_options() function docs:
class mysqli2 extends mysqli
{
public function __construct( $host, $user, $pass, $db )
{
parent::init();
parent::options( MYSQLI_OPT_CONNECT_TIMEOUT, 5 );
parent::real_connect( $host, $user, $pass, $db );
}
}
Regards.
Previous Comments:
------------------------------------------------------------------------
[2008-01-17 17:29:50] [EMAIL PROTECTED]
Give me a hint, what's up with the documentation?
http://us2.php.net/mysqli_connect shows that calling constructor of the
mysqli class is equal to calling mysqli_connect(). As you know, you need
to call mysqli_options() before a connection has been established. In
your reproduceable code you suggest a derived class which explicitly
calls the parent constructor to create a connection. Once the parent
constructor has been called you try to call mysqli_options()
(mysqli::options()). That's too late.
Your second example gets it right. How could we improve the
documentation? Thanks!
Ulf
------------------------------------------------------------------------
[2008-01-17 00:19:51] basilio dot vera at softonic dot com
Hi, I've found a solution for this problem. It can be solved with:
class mysqli2 extends mysqli
{
public function __construct( $host, $user, $pass, $db )
{
$this->init();
$this->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$this->real_connect( $host, $user, $pass, $db );
}
}
But you may consider review your docs, because it's and undocumented
feature!
------------------------------------------------------------------------
[2008-01-16 14:34:39] basilio dot vera at softonic dot com
Sorry, the error message was:
'Couldn't fetch mysqli2'
------------------------------------------------------------------------
[2008-01-16 14:23:49] basilio dot vera at softonic dot com
Description:
------------
I can't change the "MYSQLI_OPT_CONNECT_TIMEOUT" flag inside an extended
class of mysqli.
This is not really a bug, but a missed feature!
Reproduce code:
---------------
// I want some similar to this:
$mysqli = mysqli_init();
$mysqli->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
$mysqli->real_connect('localhost', 'my_user', 'my_password', 'world');
// My class that does many magic things.
class mysqli2 extends mysqli
{
public function __construct( $host, $user, $pass, $db )
{
parent::__construct( $host, $user, $pass, $db );
// Too late, the connection has been done before!
$this->options(MYSQLI_OPT_CONNECT_TIMEOUT, 5);
}
}
// If I put the options call before the parent::__construct() call I
get 'Couldn't fetch DbLink' error.
// And, obviously, this does not work.
class mysqli3 extends mysqli_init {}
Expected result:
----------------
The connect timeout has been changed to 5 seconds.
Actual result:
--------------
The connect timeout has not been changed.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=43866&edit=1