#44327 [Opn]: PDORow::queryString property numeric offsets / Crash
ID: 44327 Updated by: [EMAIL PROTECTED] Reported By: uwendel at mysql dot com Status: Open Bug Type: PDO related Operating System: Linux PHP Version: 5.3CVS-2008-03-04 (snap) New Comment: Part one of my report is bogus and the crash seems to be gone. Can anybody verify and close it? Previous Comments: [2008-04-14 09:06:06] uwendel at mysql dot com Adding Crash to Summary. [2008-04-14 09:03:12] uwendel at mysql dot com Crash with CVS snapshot [EMAIL PROTECTED]:~/php53_libmysql sapi/cli/php -v PHP 5.3.0-dev (cli) (built: Apr 11 2008 12:02:49) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies [EMAIL PROTECTED]:~/php53_libmysql sapi/cli/php -r '$db = new PDO(sqlite:/tmp/foo); $stmt = $db-query(SELECT 1); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row-{0}); var_dump($row-queryString); get_class($row);' string(1) 1 string(1) 1 Speicherzugriffsfehler [2008-03-04 17:21:29] uwendel at mysql dot com Description: What kind of thing is the PDORow::queryString property? PDORow objects are generated and returned by PDOStatement::fetch(PDO::FETCH_LAZY). PDORow objects seem a bit special in some ways. 1) PDO::FETCH_LAZY = PDO::FETCH_OBJ + PDO::FETCH_BOTH PDO::FETCH_BOTH means that the returned data is both indexed by the column name and a column offset number. For example, a query like SELECT id FROM test should return an object (resp. array) with the properties {0} and id. You can access both properties and you get what you want. But var_dump() will report only the column name based property and not the property based on the numeric column offset. I have no idea if this is a var_dump() or a PDO flaw. 2) The magic queryString property var_dump() reports a queryString property for PDORow objects returned by PDOStatement::fetch(). In all my testing I found the queryString propery value to be the query string which has constructed the corresponding PDOStatement object. However, I cannot access this property. I see it, but I have no access. That makes it a bit magic. Also, note how var_dump(), var_export() and debug_zval_dump report different things. Johannes already explained to me that the functions might do different things, but anyway it looks confusing to me. Reproduce code: --- 1, FETCH_LAZY and numeric offset -- sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $stmt = $db-prepare(SELECT 1 AS \one\); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-{0}); var_dump($row-one); ' object(PDORow)#3 (2) { [queryString]= string(17) SELECT 1 AS one [one]= string(1) 1 } -- string(1) 1 string(1) 1 2, magic PDORow::queryString() - sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $stmt = $db-prepare(SELECT 1 AS \one\); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-queryString); ' object(PDORow)#3 (2) { [queryString]= string(17) SELECT 1 AS one [one]= string(1) 1 } -- UNKNOWN:0 sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $db-exec(DROP TABLE test); $db-exec(CREATE TABLE test (id INT)); $db-exec(INSERT INTO test(id) VALUES (1)); $stmt = $db-prepare(SELECT id FROM test); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-queryString); var_export($row-queryString); print \n; debug_zval_dump($row-queryString);' -- UNKNOWN:0 NULL UNKNOWN:0 -- Edit this bug report at http://bugs.php.net/?id=44327edit=1
#44327 [Opn]: PDORow::queryString property numeric offsets / Crash
ID: 44327 User updated by: uwendel at mysql dot com -Summary: PDORow::queryString property numeric offsets Reported By: uwendel at mysql dot com Status: Open Bug Type: PDO related Operating System: Linux PHP Version: 5.3CVS-2008-03-04 (snap) New Comment: Adding Crash to Summary. Previous Comments: [2008-04-14 09:03:12] uwendel at mysql dot com Crash with CVS snapshot [EMAIL PROTECTED]:~/php53_libmysql sapi/cli/php -v PHP 5.3.0-dev (cli) (built: Apr 11 2008 12:02:49) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies [EMAIL PROTECTED]:~/php53_libmysql sapi/cli/php -r '$db = new PDO(sqlite:/tmp/foo); $stmt = $db-query(SELECT 1); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row-{0}); var_dump($row-queryString); get_class($row);' string(1) 1 string(1) 1 Speicherzugriffsfehler [2008-03-04 17:21:29] uwendel at mysql dot com Description: What kind of thing is the PDORow::queryString property? PDORow objects are generated and returned by PDOStatement::fetch(PDO::FETCH_LAZY). PDORow objects seem a bit special in some ways. 1) PDO::FETCH_LAZY = PDO::FETCH_OBJ + PDO::FETCH_BOTH PDO::FETCH_BOTH means that the returned data is both indexed by the column name and a column offset number. For example, a query like SELECT id FROM test should return an object (resp. array) with the properties {0} and id. You can access both properties and you get what you want. But var_dump() will report only the column name based property and not the property based on the numeric column offset. I have no idea if this is a var_dump() or a PDO flaw. 2) The magic queryString property var_dump() reports a queryString property for PDORow objects returned by PDOStatement::fetch(). In all my testing I found the queryString propery value to be the query string which has constructed the corresponding PDOStatement object. However, I cannot access this property. I see it, but I have no access. That makes it a bit magic. Also, note how var_dump(), var_export() and debug_zval_dump report different things. Johannes already explained to me that the functions might do different things, but anyway it looks confusing to me. Reproduce code: --- 1, FETCH_LAZY and numeric offset -- sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $stmt = $db-prepare(SELECT 1 AS \one\); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-{0}); var_dump($row-one); ' object(PDORow)#3 (2) { [queryString]= string(17) SELECT 1 AS one [one]= string(1) 1 } -- string(1) 1 string(1) 1 2, magic PDORow::queryString() - sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $stmt = $db-prepare(SELECT 1 AS \one\); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-queryString); ' object(PDORow)#3 (2) { [queryString]= string(17) SELECT 1 AS one [one]= string(1) 1 } -- UNKNOWN:0 sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $db-exec(DROP TABLE test); $db-exec(CREATE TABLE test (id INT)); $db-exec(INSERT INTO test(id) VALUES (1)); $stmt = $db-prepare(SELECT id FROM test); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-queryString); var_export($row-queryString); print \n; debug_zval_dump($row-queryString);' -- UNKNOWN:0 NULL UNKNOWN:0 -- Edit this bug report at http://bugs.php.net/?id=44327edit=1
#44327 [Opn]: PDORow::queryString property numeric offsets
ID: 44327 User updated by: uwendel at mysql dot com Reported By: uwendel at mysql dot com Status: Open Bug Type: PDO related Operating System: Linux PHP Version: 5.3CVS-2008-03-04 (snap) New Comment: Crash with CVS snapshot [EMAIL PROTECTED]:~/php53_libmysql sapi/cli/php -v PHP 5.3.0-dev (cli) (built: Apr 11 2008 12:02:49) Copyright (c) 1997-2008 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies [EMAIL PROTECTED]:~/php53_libmysql sapi/cli/php -r '$db = new PDO(sqlite:/tmp/foo); $stmt = $db-query(SELECT 1); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row-{0}); var_dump($row-queryString); get_class($row);' string(1) 1 string(1) 1 Speicherzugriffsfehler Previous Comments: [2008-03-04 17:21:29] uwendel at mysql dot com Description: What kind of thing is the PDORow::queryString property? PDORow objects are generated and returned by PDOStatement::fetch(PDO::FETCH_LAZY). PDORow objects seem a bit special in some ways. 1) PDO::FETCH_LAZY = PDO::FETCH_OBJ + PDO::FETCH_BOTH PDO::FETCH_BOTH means that the returned data is both indexed by the column name and a column offset number. For example, a query like SELECT id FROM test should return an object (resp. array) with the properties {0} and id. You can access both properties and you get what you want. But var_dump() will report only the column name based property and not the property based on the numeric column offset. I have no idea if this is a var_dump() or a PDO flaw. 2) The magic queryString property var_dump() reports a queryString property for PDORow objects returned by PDOStatement::fetch(). In all my testing I found the queryString propery value to be the query string which has constructed the corresponding PDOStatement object. However, I cannot access this property. I see it, but I have no access. That makes it a bit magic. Also, note how var_dump(), var_export() and debug_zval_dump report different things. Johannes already explained to me that the functions might do different things, but anyway it looks confusing to me. Reproduce code: --- 1, FETCH_LAZY and numeric offset -- sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $stmt = $db-prepare(SELECT 1 AS \one\); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-{0}); var_dump($row-one); ' object(PDORow)#3 (2) { [queryString]= string(17) SELECT 1 AS one [one]= string(1) 1 } -- string(1) 1 string(1) 1 2, magic PDORow::queryString() - sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $stmt = $db-prepare(SELECT 1 AS \one\); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-queryString); ' object(PDORow)#3 (2) { [queryString]= string(17) SELECT 1 AS one [one]= string(1) 1 } -- UNKNOWN:0 sapi/cli/php -r '$db = new PDO(mysql:dbname=phptest;unix_socket=/tmp/mysql.sock, root, root); $db-exec(DROP TABLE test); $db-exec(CREATE TABLE test (id INT)); $db-exec(INSERT INTO test(id) VALUES (1)); $stmt = $db-prepare(SELECT id FROM test); $stmt-execute(); $row = $stmt-fetch(PDO::FETCH_LAZY); var_dump($row); var_dump($row-queryString); var_export($row-queryString); print \n; debug_zval_dump($row-queryString);' -- UNKNOWN:0 NULL UNKNOWN:0 -- Edit this bug report at http://bugs.php.net/?id=44327edit=1