Thread: PGExec returns error without any comment

PGExec returns error without any comment

From
erkan kolemen
Date:
Hi, <br /><br />Following code fails at PQExec. I am using PQerrorMessage() function to print error message but no
output.Error code is 2. What could be the problem with select query? I tried with "drop table" it worked.<br /><br
/>[root@hqsrc]# ./1<br />PQExec failed(2):<br /><br />1.c<br />#include <stdio.h><br />#include
<stdlib.h><br/>#include <string.h><br />#include <errno.h><br />#include <sys/time.h><br
/>#include<libpq-fe.h><br /><br />int main()<br />{<br />        char *conninfo;<br />        PGconn    
*conn;<br/>        PGresult   *res;<br /><br />        /* Prepare connection info */<br />        conninfo = (char *)
malloc(64);<br/>        if (conninfo == NULL) {<br />                fprintf(stderr, "malloc error: %s\n",
strerror(errno));<br/>                return -1;<br />        }<br /><br />        memset(conninfo, 0, 64);<br
/>       strncpy(conninfo, "dbname=llist user=yyy password=xxx", 63);<br /><br />        /* Make a connection to the
database*/<br />        conn = PQconnectdb(conninfo);<br /><br />        /* Check to see that the backend connection
wassuccessfully made */<br />        if (PQstatus(conn) != CONNECTION_OK)<br />        {<br />               
fprintf(stderr,"Connection to database failed: %s", PQerrorMessage(conn));<br />                return -1;<br />       
}<br/><br />        res = PQexec(conn, "select * from lists;");<br />        if (PQresultStatus(res) !=
PGRES_COMMAND_OK)<br/>        {<br />                fprintf(stderr, "PQExec failed(%d): %s\n", PQresultStatus(res),
PQerrorMessage(conn));<br/>                PQclear(res);<br />                return -1;<br />        }<br /><br
/>       PQclear(res);<br /><br />        PQfinish(conn);<br /><br />        return 0;<br />}<br /><br /><p><hr
size="1"/>Do you Yahoo!?<br /> Get on board. <a
href="http://us.rd.yahoo.com/evt=40791/*http://advision.webevents.yahoo.com/mailbeta">You'reinvited</a> to try the new
Yahoo!Mail. 

Re: PGExec returns error without any comment

From
Michael Fuhr
Date:
On Thu, Sep 28, 2006 at 05:16:10AM -0700, erkan kolemen wrote:
>         res = PQexec(conn, "select * from lists;");
>         if (PQresultStatus(res) != PGRES_COMMAND_OK)

You're checking for the wrong result status.  Here are some excerpts
from the libpq documentation:

PGRES_COMMAND_OK   Successful completion of a command returning no data.

PGRES_TUPLES_OK   Successful completion of a command returning data (such as a SELECT    or SHOW).
 Note that a SELECT command that happens to retrieve zero rows still shows PGRES_TUPLES_OK.  PGRES_COMMAND_OK is for
commandsthat can never return rows (INSERT, UPDATE, etc.).
 

-- 
Michael Fuhr


Re: PGExec returns error without any comment

From
erkan kolemen
Date:
Thanks,<br /><br />That was the problem!<br /><br /><b><i>Volkan YAZICI <yazicivo@ttnet.net.tr></i></b>
wrote:<blockquoteclass="replbq" style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;">
OnSep 28 05:16, erkan kolemen wrote:<br />> char *conninfo;<br />> PGconn *conn;<br />> PGresult *res;<br
/>><br />> /* Prepare connection info */<br />> conninfo = (char *) malloc(64);<br />> if (conninfo ==
NULL){<br />> fprintf(stderr, "malloc error: %s\n", strerror(errno));<br />> return -1;<br />> }<br />> <br
/>>memset(conninfo, 0, 64);<br />> strncpy(conninfo, "dbname=llist user=yyy password=xxx", 63);<br /><br />I'd
prefera<br /><br /> char conninfo[] = "dbname=llist user=yyy password=xxx";<br /><br />instead of above mess.<br /><br
/>>/* Make a connection to the database */<br />> conn = PQconnectdb(conninfo);<br />> <br />> /* Check to
seethat the backend connection was successfully made */<br />> if (PQstatus(conn) != CONNECTION_OK)<br />> {<br
/>>fprintf(stderr, "Connection to database failed: %s", PQerrorMessage(conn));<br />> return -1;<br />> }<br
/>><br />> res = PQexec(conn, "select * from lists;");<br />> if (PQresultStatus(res) != PGRES_COMMAND_OK)<br
/><br/>You should be checking for PGRES_TUPLES_OK, not COMMAND_OK.<br /><br />AFAIU from your name, you're from Turkey.
Haveyou ever heard about<br />"PostgreSQL ile Programlama" book? You can get it freely from here:<br
/>http://www.students.itu.edu.tr/~yazicivo/doc/postgresql-ile-programlama.html<br/><br /><br />Regards.<br
/></blockquote><br/><p><hr size="1" /><a
href="http://us.rd.yahoo.com/evt=43256/*http://advision.webevents.yahoo.com/mailbeta">All-new Yahoo! Mail </a>- Fire up
amore powerful email and get things done faster.