bug46292.phpt 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. --TEST--
  2. Bug #46292 (PDO::setFetchMode() shouldn't requires the 2nd arg when using FETCH_CLASSTYPE)
  3. --SKIPIF--
  4. <?php
  5. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
  6. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  7. MySQLPDOTest::skip();
  8. if (version_compare(PHP_VERSION, '5.1.0', '<'))
  9. die("skip Needs 5.1.0 and Interface Serializable");
  10. ?>
  11. --FILE--
  12. <?php
  13. require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
  14. $pdoDb = MySQLPDOTest::factory();
  15. class myclass implements Serializable {
  16. public function __construct() {
  17. printf("%s()\n", __METHOD__);
  18. }
  19. public function serialize() {
  20. printf("%s()\n", __METHOD__);
  21. return "any data from serialize()";
  22. }
  23. public function unserialize($dat) {
  24. printf("%s(%s)\n", __METHOD__, var_export($dat, true));
  25. return $dat;
  26. }
  27. }
  28. class myclass2 extends myclass { }
  29. $pdoDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
  30. $pdoDb->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
  31. $pdoDb->query('DROP TABLE IF EXISTS testz');
  32. $pdoDb->query('CREATE TABLE testz (name VARCHAR(20) NOT NULL, value INT)');
  33. $pdoDb->query("INSERT INTO testz VALUES ('myclass', 1), ('myclass2', 2), ('myclass', NULL), ('myclass3', NULL)");
  34. $stmt = $pdoDb->prepare("SELECT * FROM testz");
  35. var_dump($stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE | PDO::FETCH_GROUP));
  36. $stmt->execute();
  37. var_dump($stmt->fetch());
  38. var_dump($stmt->fetch());
  39. var_dump($stmt->fetchAll());
  40. ?>
  41. --CLEAN--
  42. <?php
  43. require dirname(__FILE__) . '/mysql_pdo_test.inc';
  44. $db = MySQLPDOTest::factory();
  45. $db->exec('DROP TABLE IF EXISTS testz');
  46. ?>
  47. --EXPECTF--
  48. bool(true)
  49. myclass::__construct()
  50. object(myclass)#%d (1) {
  51. [%u|b%"value"]=>
  52. %unicode|string%(1) "1"
  53. }
  54. myclass::__construct()
  55. object(myclass2)#%d (1) {
  56. [%u|b%"value"]=>
  57. %unicode|string%(1) "2"
  58. }
  59. myclass::__construct()
  60. array(2) {
  61. [0]=>
  62. object(myclass)#%d (1) {
  63. [%u|b%"value"]=>
  64. NULL
  65. }
  66. [1]=>
  67. object(stdClass)#%d (1) {
  68. [%u|b%"value"]=>
  69. NULL
  70. }
  71. }