PHP Bugs  
php.net | support | documentation | report a bug | advanced search | search howto | statistics | login

go to bug id or search bugs for  

Bug #37124 PostgreSQL Query Returns Resource id for Field Value
Submitted:18 Apr 2006 5:54pm UTC Modified: 20 Aug 2007 10:29am UTC
From:ahaig at penguinmilitia dot net Assigned to:
Status:Closed Category:Documentation problem
Version:5.1.2 OS:Mac OS X 10.4.6
Votes:4 Avg. Score:5.0 ± 0.0 Reproduced:4 of 4 (100.0%)
Same Version:2 (50.0%) Same OS:0 (0.0%)
View/Vote Developer Edit Submission

[18 Apr 2006 5:54pm UTC] ahaig at penguinmilitia dot net
Description:
------------
I'm using PostgreSQL 8.0.2

Query:

SELECT t.tgargs as args FROM pg_trigger t,pg_class c,pg_proc 
p WHERE t.tgenabled AND t.tgrelid = c.oid AND t.tgfoid = 
p.oid AND p.proname = 'RI_FKey_check_ins' AND c.relname 
=:tablename ORDER BY t.tgrelid

:tablename is bound to a var with the value 'tables' (for my 
particular case), and the same result occurs if I do not use 
binding and fill the string in myself with 'tables' instead 
of :tablename. When I run the query in psql it returns:

           args                                                   
------------------------------------------------------------
 tables_mainclassname_fkey\000tables\000classes
\000UNSPECIFIED\000mainclassname\000object_class\000
 tables_databasehandle_fkey\000tables\000databases
\000UNSPECIFIED\000databasehandle\000databasehandle\000
(2 rows)

Reproduce code:
---------------
$statement = $my_PDO_instance->prepare("SELECT t.tgargs as args FROM
pg_trigger t,pg_class c,pg_proc p WHERE t.tgenabled AND t.tgrelid =
c.oid AND t.tgfoid = p.oid AND p.proname = 'RI_FKey_check_ins' AND
c.relname =:tablename ORDER BY t.tgrelid");
$statement->bindParam( ':tablename', $table );
$statement->execute();
print_r($statement->fetchAll());

The same thing occurs if I do:

foreach ( $my_PDO_instance->query("SELECT t.tgargs as args FROM
pg_trigger t,pg_class c,pg_proc p WHERE t.tgenabled AND t.tgrelid =
c.oid AND t.tgfoid = p.oid AND p.proname = 'RI_FKey_check_ins' AND
c.relname =:tablename ORDER BY t.tgrelid") as $this_row ) {
     print_r($this_row);
}

Expected result:
----------------
Array ( [args] => tables_mainclassname_fkey\000tables
\000classes\000UNSPECIFIED\000mainclassname\000object_class
\000 ) Array ( [args] => tables_databasehandle_fkey\000tables
\000databases\000UNSPECIFIED\000databasehandle
\000databasehandle\000 )

Actual result:
--------------
Array ( [args] => Resource id #20 ) Array ( [args] => Resource 
id #21 )
[18 Apr 2006 5:57pm UTC] tony2001@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc.

If possible, make the script source available online and provide
an URL to it here. Try to avoid embedding huge scripts into the report.

[18 Apr 2006 6:04pm UTC] ahaig at penguinmilitia dot net
I guess I didn't include <?php ?> but I thought I included a 
full script. You will need to fill in $dsn $user and 
$password and $table as appropriate. 

$dsn should refer to a PostgreSQL DB, $table to a table with 
at least 1 foreign key.

Script:

<?php
$database = new PDO( $dsn, $user, $password );
$statement = $database->prepare("SELECT t.tgargs as args 
FROM pg_trigger t,pg_class c,pg_proc p WHERE t.tgenabled AND 
t.tgrelid = c.oid AND t.tgfoid = p.oid AND p.proname = 
'RI_FKey_check_ins' AND c.relname =:tablename ORDER BY 
t.tgrelid");
$table = '<name of table in database with at least 1 foreign 
key>';
$statement->bindParam( ':tablename', $table );
$statement->execute();
print_r($statement->fetchAll());
die("Here's my error!");
?>
[18 Apr 2006 6:07pm UTC] helly@php.net
What is the postgres data type you return here?
[18 Apr 2006 6:10pm UTC] ahaig at penguinmilitia dot net
pg_trigger.tgargs is a built in column in template1...

Looks like it's a bytea type.

(\d pg_trigger)
[19 Apr 2006 9:58am UTC] tony2001@php.net
Assigned to the maintainer.
[19 Apr 2006 2:44pm UTC] wez@php.net
Sounds like a LOB type... tried using the streams functions to read it?
(the resource is a stream).
[19 Apr 2006 5:00pm UTC] ahaig at penguinmilitia dot net
Just tried that. stream_get_line( $row['args'], 100 ) 
outputs:

tables_mainclassname_fkey
[19 Apr 2006 5:01pm UTC] ahaig at penguinmilitia dot net
Just tried that. stream_get_line( $row['args'], 100 ) 
outputs:

tables_mainclassname_fkey
[19 Apr 2006 5:02pm UTC] ahaig at penguinmilitia dot net
Trying to paste the information here about what I got trying 
to use a stream but for some reason it truncates it... Ended 
up with the same truncated post twice.
[19 Apr 2006 9:45pm UTC] tony2001@php.net
PDO_PGSQL returns bytea fields as streams by design.
Reclassified as docu problem.
[20 Aug 2007 10:29am UTC] vrana@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation
better.

"The bytea fields are returned as streams."

RSS feed | show source 

PHP Copyright © 2001-2009 The PHP Group
All rights reserved.
Last updated: Sat Nov 21 10:30:49 2009 UTC