ID: 43866 Updated by: [EMAIL PROTECTED] 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:
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 Previous Comments: ------------------------------------------------------------------------ [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
