#46249 [Csd->Opn]: pdo_pgsql always fill in NULL for empty BLOB

From: Date: Mon, 13 Oct 2008 02:31:43 +0000
Subject: #46249 [Csd->Opn]: pdo_pgsql always fill in NULL for empty BLOB
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-129662@lists.php.net to get a copy of this message
ID: 46249 User updated by: hswong3i at gmail dot com Reported By: hswong3i at gmail dot com -Status: Closed +Status: Open Bug Type: PDO related Operating System: Debian PHP Version: 5.2.6 Assigned To: felipe New Comment: Bug still exists, but preform in another way... Please try the following code snippet: <?php function _var_dump($msg) { print("<code><pre>"); var_dump($msg); print("</pre></code>"); } function db_insert($sql, $data) { global $active_db; $stmt = $active_db->prepare($sql); $blob = fopen('php://memory', 'a'); fwrite($blob, $data); rewind($blob); $stmt->bindParam(':blob1', $blob, PDO::PARAM_LOB); $stmt->execute(); $id = $active_db->lastInsertId('test_one_blob_id_seq'); return $id; } function db_select($sql, $id) { global $active_db; $sql = 'SELECT * FROM "test_one_blob" WHERE "id" = :id'; $stmt = $active_db->prepare($sql); $stmt->bindParam(':id', $id); $stmt->execute(); return $stmt->fetch(PDO::FETCH_ASSOC); } $active_db = new PDO('pgsql:host=localhost dbname=DRUPAL_7', 'root', 'CHANGE', array(PDO::ATTR_STRINGIFY_FETCHES => TRUE)); // Test normal BLOB insert $data = "This is\000a test."; $id = db_insert('INSERT INTO "test_one_blob" ("blob1") VALUES (:blob1)', $data); $return = db_select('SELECT * FROM "test_one_blob" WHERE "id" = :id', $id); _var_dump("Test normal BLOB insert"); _var_dump($data); _var_dump($return['blob1']); _var_dump($data === $return['blob1']); // Test NULL BLOB insert $data = NULL; $id = db_insert('INSERT INTO "test_one_blob" ("blob1") VALUES (:blob1)', $data); $return = db_select('SELECT * FROM "test_one_blob" WHERE "id" = :id', $id); _var_dump("Test NULL BLOB insert"); _var_dump($data); _var_dump($return['blob1']); _var_dump($data === $return['blob1']); // Test empty BLOB insert $data = ""; $id = db_insert('INSERT INTO "test_one_blob" ("blob1") VALUES (:blob1)', $data); $return = db_select('SELECT * FROM "test_one_blob" WHERE "id" = :id', $id); _var_dump("Test empty BLOB insert"); _var_dump($data); _var_dump($return['blob1']); _var_dump($data === $return['blob1']); ?> Previous Comments: ------------------------------------------------------------------------ [2008-10-12 17:44:50] hswong3i at gmail dot com @felipe: Yes I did. I give a compare with cvs.php.net log message, and check if my PHP package coming with the fix. Fix is already included, #46249 is fixed but than buggy for #46274 as mentioned :S I try both PHP in CLI and Apache2.2. BLOB INSERT/UPDATE are successful in both cases, but fetching NULL and empty string are both buggy... ------------------------------------------------------------------------ [2008-10-12 16:51:05] felipe@php.net Do you have tried after 13:03:31 2008 UTC? I've commited a complete fix to these issue in this time. Thanks. ------------------------------------------------------------------------ [2008-10-12 16:39:57] hswong3i at gmail dot com I try for both PHP5.2 and 5.3 from http://snaps.php.net/ (they both coming with the fix). They are now able to handle NULL and empty string BLOB INSERT/UPDATE. Thanks for the work. BTW, it is now generate another issue that should belongs to http://bugs.php.net/bug.php?id=46274. Whenever fetching NULL or empty BLOB content from DB apache will crash with Segmentation fault. Maybe we still need some love for that :S ------------------------------------------------------------------------ [2008-10-11 19:05:59] felipe@php.net This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. ------------------------------------------------------------------------ [2008-10-11 11:47:35] felipe@php.net Oh sorry, you're right. I can reproduce it. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/46249 -- Edit this bug report at http://bugs.php.net/?id=46249&edit=1

« previous php.bugs (#129662) next »