bug46292.phpt 1.9 KB

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