Browse Source
Revert "Fixed bug #71820 pg_fetch_object bind parameters before call constructor"
Revert "Fixed bug #71820 pg_fetch_object bind parameters before call constructor"
This reverts commit b4eedd128b.
This fixed bug #72151, and reverts the fix for bug #71820.
See also bug #50636 and #49521 for the history.
PHP-7.0.7
4 changed files with 7 additions and 239 deletions
-
25ext/mysqli/mysqli.c
-
104ext/mysqli/tests/bug71820.phpt
-
24ext/pgsql/pgsql.c
-
93ext/pgsql/tests/bug71820.phpt
@ -1,104 +0,0 @@ |
|||
--TEST-- |
|||
Bug #71820 __set has to be called after constructor, mysqli part |
|||
--SKIPIF-- |
|||
<?php |
|||
require_once('skipif.inc'); |
|||
require_once('skipifconnectfailure.inc'); |
|||
require_once("connect.inc"); |
|||
?> |
|||
--FILE-- |
|||
<?php |
|||
|
|||
include "connect.inc"; |
|||
|
|||
$tableName = 'test_mysqli_fetch_object'; |
|||
|
|||
class TestRow |
|||
{ |
|||
|
|||
private $set_from_constructor; |
|||
private $data; |
|||
private $hello = "world"; |
|||
|
|||
public function __construct($set_from_constructor) |
|||
{ |
|||
$this->set_from_constructor = $set_from_constructor; |
|||
} |
|||
|
|||
public function __set($name, $value) |
|||
{ |
|||
if (!isset($this->data[$name])) { |
|||
/* $this->set_from_constructor has an expected value */ |
|||
$this->data[$name] = 42 == $this->set_from_constructor ? $value : -1; |
|||
return; |
|||
} |
|||
throw new \Exception('Duplicity column name.'); |
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
if (!($connection = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))) { |
|||
printf("[001] Cannot connect to the server"); |
|||
} |
|||
|
|||
$rc = mysqli_query($connection, "DROP TABLE IF EXISTS $tableName"); |
|||
if (!$rc) |
|||
printf("[002] [%d] %s\n", mysqli_errno($connection), mysqli_error($connection)); |
|||
|
|||
$table = <<<SQL |
|||
CREATE TABLE $tableName ( |
|||
id int NOT NULL auto_increment primary key, |
|||
name varchar(255) NOT NULL |
|||
); |
|||
SQL; |
|||
|
|||
$rc = mysqli_query($connection, $table); |
|||
if (!$rc) |
|||
printf("[003] [%d] %s\n", mysqli_errno($connection), mysqli_error($connection)); |
|||
|
|||
$rc = mysqli_query($connection, "INSERT INTO " . $tableName . " (name) VALUES ('Doe'), ('Joe')"); |
|||
if (!$rc) |
|||
printf("[004] [%d] %s\n", mysqli_errno($connection), mysqli_error($connection)); |
|||
|
|||
$result = mysqli_query($connection, 'SELECT * FROM ' . $tableName . ' LIMIT 10'); |
|||
if (!$result) |
|||
printf("[005] [%d] %s\n", mysqli_errno($result), mysqli_error($result)); |
|||
|
|||
|
|||
while ($row = mysqli_fetch_object($result, 'TestRow', [42])) { |
|||
var_dump($row); |
|||
} |
|||
|
|||
mysqli_close($connection); |
|||
|
|||
?> |
|||
==DONE== |
|||
--EXPECTF-- |
|||
object(TestRow)#%d (3) { |
|||
["set_from_constructor":"TestRow":private]=> |
|||
int(42) |
|||
["data":"TestRow":private]=> |
|||
array(2) { |
|||
["id"]=> |
|||
string(1) "1" |
|||
["name"]=> |
|||
string(3) "Doe" |
|||
} |
|||
["hello":"TestRow":private]=> |
|||
string(5) "world" |
|||
} |
|||
object(TestRow)#%d (3) { |
|||
["set_from_constructor":"TestRow":private]=> |
|||
int(42) |
|||
["data":"TestRow":private]=> |
|||
array(2) { |
|||
["id"]=> |
|||
string(1) "2" |
|||
["name"]=> |
|||
string(3) "Joe" |
|||
} |
|||
["hello":"TestRow":private]=> |
|||
string(5) "world" |
|||
} |
|||
==DONE== |
|||
@ -1,93 +0,0 @@ |
|||
--TEST-- |
|||
Bug #71820 pg_fetch_object bind parameters before call constructor |
|||
--SKIPIF-- |
|||
<?php |
|||
require_once('skipif.inc'); |
|||
?> |
|||
--FILE-- |
|||
<?php |
|||
|
|||
require_once('config.inc'); |
|||
|
|||
$tableName = 'test_pg_fetch_object'; |
|||
|
|||
class TestRow |
|||
{ |
|||
|
|||
private $set_from_constructor; |
|||
private $data; |
|||
private $hello = 42; |
|||
|
|||
public function __construct($set_from_constructor) |
|||
{ |
|||
$this->set_from_constructor = $set_from_constructor; |
|||
} |
|||
|
|||
public function __set($name, $value) |
|||
{ |
|||
if (!isset($this->data[$name])) { |
|||
/* $this->set_from_constructor has an expected value */ |
|||
$this->data[$name] = 42 == $this->set_from_constructor ? $value : -1; |
|||
return; |
|||
} |
|||
throw new \Exception('Duplicity column name.'); |
|||
} |
|||
|
|||
} |
|||
|
|||
$connection = pg_connect($conn_str); |
|||
|
|||
if (!$connection) { |
|||
die('Connection faild.'); |
|||
} |
|||
|
|||
$table = <<<SQL |
|||
CREATE TABLE IF NOT EXISTS $tableName ( |
|||
id serial NOT NULL, |
|||
name character varying NOT NULL |
|||
); |
|||
SQL; |
|||
pg_query($connection, $table); |
|||
|
|||
pg_query_params('INSERT INTO ' . $tableName . ' (name) VALUES ($1), ($2);', ['$1' => 'Doe', '$2' => 'Joe']); |
|||
|
|||
$result = pg_query('SELECT * FROM ' . $tableName . ' LIMIT 10;'); |
|||
|
|||
while ($row = pg_fetch_object($result, NULL, 'TestRow', [42])) { |
|||
var_dump($row); |
|||
} |
|||
|
|||
pg_query($connection, "DROP TABLE $tableName"); |
|||
|
|||
pg_close($connection); |
|||
|
|||
?> |
|||
==DONE== |
|||
--EXPECTF-- |
|||
object(TestRow)#%d (3) { |
|||
["set_from_constructor":"TestRow":private]=> |
|||
int(42) |
|||
["data":"TestRow":private]=> |
|||
array(2) { |
|||
["id"]=> |
|||
string(1) "1" |
|||
["name"]=> |
|||
string(3) "Doe" |
|||
} |
|||
["hello":"TestRow":private]=> |
|||
int(42) |
|||
} |
|||
object(TestRow)#%d (3) { |
|||
["set_from_constructor":"TestRow":private]=> |
|||
int(42) |
|||
["data":"TestRow":private]=> |
|||
array(2) { |
|||
["id"]=> |
|||
string(1) "2" |
|||
["name"]=> |
|||
string(3) "Joe" |
|||
} |
|||
["hello":"TestRow":private]=> |
|||
int(42) |
|||
} |
|||
==DONE== |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue