Обсуждение: Strange interaction with php's pg_query

Поиск
Список
Период
Сортировка

Strange interaction with php's pg_query

От
Bill Moran
Дата:
I'm a little burned out right now, so I figured I'll ask the
question before calling quits for tonight, and (hopefully) the
answer will be in my inbox come morning. ;)

I'm building a web app in php with Postgre as the backend db.
I'm pretty new to Postgre, but I've done a lot of work with
php+MySQL.

I have a simple table as follows:

create table sysinfo (
    attname char(30) primary key,
    attvalue text
    ) without oids

And if I start psql and enter:
"select * from sysinfo"
I get the expected list of name/value pairs that were entered
into the table at an earlier operation.

However, if I execute the same query using pg_query() in php,
I get the error:
Warning: pg_query() query failed: ERROR: Relation "sysinfo" does not exist in
/usr/home/group/webpages/epd/class/base.class.phpon line 44 

This really confuses me, as "sysinfo" isn't even a relation and
why should the parser even imagine it to be a relation?  I've
tried rearranging the SELECT statement (with and without WHERE
clauses, with and without FROM clause).  Every incarnation I try
works fine in the psql program, but gives the same error (as above)
in php.

I'm using FreeBSD 4.5-STABLE as of April 23rd, Postgres 7.2.1_1,
mod_php4-4.2.0, and apache-1.3.24_7 all installed from FreeBSD
ports collection.

Any advice is much welcome.

--
Bill Moran
Potential Technology
http://www.potentialtech.com


Re: Strange interaction with php's pg_query

От
Tom Lane
Дата:
Bill Moran <wmoran@potentialtech.com> writes:
> And if I start psql and enter:
> "select * from sysinfo"
> I get the expected list of name/value pairs that were entered
> into the table at an earlier operation.

> However, if I execute the same query using pg_query() in php,
> I get the error:
> Warning: pg_query() query failed: ERROR: Relation "sysinfo" does not exist in
/usr/home/group/webpages/epd/class/base.class.phpon line 44 

I think your php client must be connecting to a different database
than you are connecting to when you run psql by hand.  If you are
allowing the default choice of database name = user name to be taken,
this isn't real surprising...

> This really confuses me, as "sysinfo" isn't even a relation and
> why should the parser even imagine it to be a relation?

"relation" and "table" are more or less synonymous in PG error messages.
(IMHO the exact meaning of "relation" in our code is "something with a
pg_class entry", which covers also views, sequences, indexes, etc; but
you probably didn't need to know that.)

            regards, tom lane

Re: Strange interaction with php's pg_query

От
Bill Moran
Дата:
Tom Lane wrote:
> Bill Moran <wmoran@potentialtech.com> writes:
>
>>And if I start psql and enter:
>>"select * from sysinfo"
>>I get the expected list of name/value pairs that were entered
>>into the table at an earlier operation.
>
>>However, if I execute the same query using pg_query() in php,
>>I get the error:
>>Warning: pg_query() query failed: ERROR: Relation "sysinfo" does not exist in
/usr/home/group/webpages/epd/class/base.class.phpon line 44 
>
> I think your php client must be connecting to a different database
> than you are connecting to when you run psql by hand.  If you are
> allowing the default choice of database name = user name to be taken,
> this isn't real surprising...

That's it.  I guess it really was _too_ late for me to be working
on this last night.  Thanks.

>>This really confuses me, as "sysinfo" isn't even a relation and
>>why should the parser even imagine it to be a relation?
>
> "relation" and "table" are more or less synonymous in PG error messages.
> (IMHO the exact meaning of "relation" in our code is "something with a
> pg_class entry", which covers also views, sequences, indexes, etc; but
> you probably didn't need to know that.)

That helps too.  Knowing the terminology that Postgre uses will help
me be less of a dummy when interpreting error messages in the future.

--
Bill Moran
Potential Technology
http://www.potentialtech.com


Re: Strange interaction with php's pg_query

От
Scott Marlowe
Дата:
Sorry, but we really need to see your code.  My guess is that you've got a
simple syntax error in your php script and php thinks it's interpreting
your sql statement.

On Mon, 13 May 2002, Bill Moran wrote:

> I'm a little burned out right now, so I figured I'll ask the
> question before calling quits for tonight, and (hopefully) the
> answer will be in my inbox come morning. ;)
>
> I'm building a web app in php with Postgre as the backend db.
> I'm pretty new to Postgre, but I've done a lot of work with
> php+MySQL.
>
> I have a simple table as follows:
>
> create table sysinfo (
>     attname char(30) primary key,
>     attvalue text
>     ) without oids
>
> And if I start psql and enter:
> "select * from sysinfo"
> I get the expected list of name/value pairs that were entered
> into the table at an earlier operation.
>
> However, if I execute the same query using pg_query() in php,
> I get the error:
> Warning: pg_query() query failed: ERROR: Relation "sysinfo" does not exist in
/usr/home/group/webpages/epd/class/base.class.phpon line 44 
>
> This really confuses me, as "sysinfo" isn't even a relation and
> why should the parser even imagine it to be a relation?  I've
> tried rearranging the SELECT statement (with and without WHERE
> clauses, with and without FROM clause).  Every incarnation I try
> works fine in the psql program, but gives the same error (as above)
> in php.
>
> I'm using FreeBSD 4.5-STABLE as of April 23rd, Postgres 7.2.1_1,
> mod_php4-4.2.0, and apache-1.3.24_7 all installed from FreeBSD
> ports collection.
>
> Any advice is much welcome.
>
>