From:
Operating system: Linux 2.6
PHP version: 5.3.6
Package: PostgreSQL related
Bug Type: Bug
Bug description:pg_query_params not returning value from PostgreSQL rule
Description:
------------
When using a PostgreSQL rule to return a value on an INSERT, pg_query's
return is a resource that contains the correct information, while
pg_query_params's return is empty/null.
Tested and confirmed on:
'Linux 2.6.18-194.17.1.el5 #1 SMP Mon Sep 20 07:12:06 EDT 2010 x86_64
x86_64 x86_64 GNU/Linux' running PHP 5.3.5-1 [Note: Production server -
can't upgrade myself for testing]
and on
'Linux 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:50 UTC 2011 i686
i686 i386 GNU/Linux' virtual machine running PHP 5.3.5-1 and then also
tested against 5.3.6 compiled from source.
Test script:
---------------
Database setup:
CREATE DATABASE test WITH OWNER = postgres ENCODING = 'UTF8' LC_COLLATE
= 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;
CREATE SEQUENCE widget_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE
9223372036854775807 START 1 CACHE 1;
ALTER TABLE widget_id_seq OWNER TO postgres;
CREATE TABLE widget ( id serial NOT NULL, widgetname character
varying(20) NOT NULL, inserttime timestamp without time zone NOT NULL,
CONSTRAINT widget_pkey PRIMARY KEY (id) ) WITH ( OIDS=FALSE );
ALTER TABLE widget OWNER TO postgres;
CREATE OR REPLACE RULE get_widget_id_on_insert AS ON INSERT TO widget
DO SELECT currval('widget_id_seq'::text::regclass) AS id;
PHP test script:
<?php
$db_connection = pg_connect("host=localhost dbname=test
user=postgres");
$good_query = "INSERT INTO widget (widgetname, inserttime) VALUES
('Good Test Widget', NOW())";
$good_result_ref = pg_query($db_connection, $good_query);
$good_result_data = pg_fetch_array($good_result_ref);
echo 'Good result ID:' . $good_result_data['id'] . "\n";
$bad_query = 'INSERT INTO widget (widgetname, inserttime) VALUES ($1,
NOW())';
$bad_params = array('Bad Test Widget');
$bad_result_ref = pg_query_params($db_connection, $bad_query,
$bad_params);
$bad_result_data = pg_fetch_array($bad_result_ref);
echo 'Bad result ID:' . $bad_result_data['id'] . "\n";
pg_close($db_connection);
exit;
?>
Expected result:
----------------
(Note: The difference between this and the actual result is that "Bad
result ID:" has an integer value (its id) accessible)
[justin@mybox ~]$ php rule_failure.php
Good result ID:1
Bad result ID:2
[justin@mybox ~]$ php rule_failure.php
Good result ID:3
Bad result ID:4
[justin@mybox ~]$ psql --dbname test --user postgres
psql (8.4.7)
Type "help" for help.
test=# SELECT * FROM widget;
id | widgetname | inserttime
----+------------------+----------------------------
1 | Good Test Widget | 2011-05-18 15:57:22.182711
2 | Bad Test Widget | 2011-05-18 15:57:22.187533
3 | Good Test Widget | 2011-05-18 15:57:26.16656
4 | Bad Test Widget | 2011-05-18 15:57:26.170966
(4 rows)
test=#
Actual result:
--------------
[justin@mybox ~]$ php rule_failure.php
Good result ID:1
Bad result ID:
[justin@mybox ~]$ php rule_failure.php
Good result ID:3
Bad result ID:
[justin@mybox ~]$ psql --dbname test --user postgres
psql (8.4.7)
Type "help" for help.
test=# SELECT * FROM widget;
id | widgetname | inserttime
----+------------------+----------------------------
1 | Good Test Widget | 2011-05-18 15:57:22.182711
2 | Bad Test Widget | 2011-05-18 15:57:22.187533
3 | Good Test Widget | 2011-05-18 15:57:26.16656
4 | Bad Test Widget | 2011-05-18 15:57:26.170966
(4 rows)
test=#
--
Edit bug report at http://bugs.php.net/bug.php?id=54863&edit=1
--
Try a snapshot (PHP 5.2):
http://bugs.php.net/fix.php?id=54863&r=trysnapshot52
Try a snapshot (PHP 5.3):
http://bugs.php.net/fix.php?id=54863&r=trysnapshot53
Try a snapshot (trunk):
http://bugs.php.net/fix.php?id=54863&r=trysnapshottrunk
Fixed in SVN:
http://bugs.php.net/fix.php?id=54863&r=fixed
Fixed in SVN and need be documented:
http://bugs.php.net/fix.php?id=54863&r=needdocs
Fixed in release:
http://bugs.php.net/fix.php?id=54863&r=alreadyfixed
Need backtrace:
http://bugs.php.net/fix.php?id=54863&r=needtrace
Need Reproduce Script:
http://bugs.php.net/fix.php?id=54863&r=needscript
Try newer version:
http://bugs.php.net/fix.php?id=54863&r=oldversion
Not developer issue:
http://bugs.php.net/fix.php?id=54863&r=support
Expected behavior:
http://bugs.php.net/fix.php?id=54863&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=54863&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=54863&r=submittedtwice
register_globals:
http://bugs.php.net/fix.php?id=54863&r=globals
PHP 4 support discontinued: http://bugs.php.net/fix.php?id=54863&r=php4
Daylight Savings: http://bugs.php.net/fix.php?id=54863&r=dst
IIS Stability:
http://bugs.php.net/fix.php?id=54863&r=isapi
Install GNU Sed:
http://bugs.php.net/fix.php?id=54863&r=gnused
Floating point limitations:
http://bugs.php.net/fix.php?id=54863&r=float
No Zend Extensions:
http://bugs.php.net/fix.php?id=54863&r=nozend
MySQL Configuration Error:
http://bugs.php.net/fix.php?id=54863&r=mysqlcfg