|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-07-16 09:44 UTC] rorezende at hotmail dot com
Description: ------------ In source code of php 4.3.2 exists an error ext/pgsql/pgsql.c. In the function pg_convert (php_pgsql_convert) it is not necessary to specify the schema name. But in the sql statement insert it is. Below is the portion of the source code which needs to be fixed. Reproduce code: --------------- ext/pgsql/pgsql.c : function : PHPAPI int php_pgsql_insert(PGconn *pg_link, const char *table, zval *var_array, ulong opt, char **sql TSRMLS_DC) line (HERE --> smart_str_appends(&querystr, table);) Must be something like : NEW HERE --> smart_str_appends(&querystr, schema); smart_str_appends(&querystr, "."); smart_str_appends(&querystr, table); the schema name can be obtained from realnamespace collumn (oid) from table pg_class. Expected result: ---------------- pg_insert should include the schema name in the insert sql statement. Actual result: -------------- the schema name is not specify in sql PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Nov 13 08:00:02 2025 UTC |
Nope, this is a genuine bug, I've tested on SuSE Linux Professional 9.3 using both PHP 4.3.10 and 5.0.3 against PostgreSQL 8.0.3. They both produce non-working results. To replicate the bug: test.sql: create schema tstschma; create table tstschma.tsttbl ( x int not null, y int not null, primary key (x) ); now try this php: $db = pg_connect("dbname=testdb"); $l = array('x'=>'1', 'y'=>'2'); pg_insert($db, "tstschma.tsttbl", $l); pg_close($db); If you remove the schema (tstschma) from the name then the select works, but the insert of course does not. The problem stems from the fact that pg_class.relname does not include the schema name, but to run a query against the table you must have the schema name. I suggest your fix is to strip everything before and including the last dot in the table name (won't change anything for those not using schemas, but will strip "tstschma." from the above example), but use the table name passed to the method (ie. including the "tstschma.") when you go to do the insert.Nope, this is a genuine bug, I've tested on SuSE Linux Professional 9.3 using both PHP 4.3.10 and 5.0.3 against PostgreSQL 8.0.3. They both produce non-working results. To replicate the bug: test.sql: create schema tstschma; create table tstschma.tsttbl ( x int not null, y int not null, primary key (x) ); now try this php: $db = pg_connect("dbname=testdb"); $l = array('x'=>'1', 'y'=>'2'); pg_insert($db, "tstschma.tsttbl", $l); pg_close($db); If you remove the schema (tstschma) from the name then the select works, but the insert of course does not. The problem stems from the fact that pg_class.relname does not include the schema name, but to run a query against the table you must have the schema name. I suggest your fix is to strip everything before and including the last dot in the table name (won't change anything for those not using schemas, but will strip "tstschma." from the above example), but use the table name passed to the method (ie. including the "tstschma.") when you go to do the insert.