1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
--TEST--
MySQL PDO: PDOStatement->fetchObject() with $constructorArgs
--EXTENSIONS--
pdo_mysql
--SKIPIF--
<?php
require_once __DIR__ . '/inc/mysql_pdo_test.inc';
MySQLPDOTest::skip();
$db = MySQLPDOTest::factory();
try {
$query = "SELECT '', NULL, \"\" FROM DUAL";
$stmt = $db->prepare($query);
$ok = $stmt->execute();
} catch (PDOException $e) {
die("skip: Test cannot be run with SQL mode ANSI");
}
if (!$ok)
die("skip: Test cannot be run with SQL mode ANSI");
?>
--FILE--
<?php
require_once __DIR__ . '/inc/mysql_pdo_test.inc';
/** @var PDO $db */
$db = MySQLPDOTest::factory();
$table = 'pdo_mysql_stmt_fetchobject_ctor_args';
MySQLPDOTest::createTestTable($table, $db);
$query = "SELECT id FROM {$table} ORDER BY id ASC LIMIT 1";
$stmt = $db->prepare($query);
class Foo {
public int $a;
public int $id;
public function __construct($a) {
$this->a = $a;
}
}
class Bar {
public int $id;
}
$stmt->execute();
try {
$obj = $stmt->fetchObject(Foo::class);
} catch (ArgumentCountError $exception) {
echo $exception->getMessage() . "\n";
}
$stmt->execute();
try {
$obj = $stmt->fetchObject(Foo::class, []);
} catch (ArgumentCountError $exception) {
echo $exception->getMessage() . "\n";
}
$stmt->execute();
$obj = $stmt->fetchObject(Foo::class, ["a" => 123]);
var_dump($obj);
$stmt->execute();
$obj = $stmt->fetchObject(Bar::class);
var_dump($obj);
$stmt->execute();
$obj = $stmt->fetchObject(Bar::class, []);
var_dump($obj);
try {
$stmt->execute();
$obj = $stmt->fetchObject(Bar::class, ["a" => 123]);
} catch (Error $exception) {
echo $exception->getMessage() . "\n";
}
?>
--CLEAN--
<?php
require_once __DIR__ . '/inc/mysql_pdo_test.inc';
$db = MySQLPDOTest::factory();
$db->exec('DROP TABLE IF EXISTS pdo_mysql_stmt_fetchobject_ctor_args');
?>
--EXPECTF--
Too few arguments to function Foo::__construct(), 0 passed and exactly 1 expected
Too few arguments to function Foo::__construct(), 0 passed and exactly 1 expected
object(Foo)#%d (2) {
["a"]=>
int(123)
["id"]=>
int(1)
}
object(Bar)#%d (1) {
["id"]=>
int(1)
}
object(Bar)#%d (1) {
["id"]=>
int(1)
}
User-supplied statement does not accept constructor arguments
|