Re: display query results - Mailing list pgsql-php

From Andy Shellam
Subject Re: display query results
Date
Msg-id 4890D124.7020506@mailnetwork.co.uk
Whole thread Raw
In response to Re: display query results  (PJ <af.gourmet@videotron.ca>)
List pgsql-php
PJ wrote:
> Lynna Landstreet wrote:
> Well, it does explain things a little. Unfortunately, I have tried
> about everything imaginable before posting except the right thing.
> I can not visualize what it is that my query is returning. Here is
> what the code is:
>
> Whatever  I enter as values for pg_fetch_result, the screen output is :
>
> resource(3) or type (pgsql result)
> *Warning*: pg_fetch_result() [function.pg-fetch-result
> <http://biggie/k2/function.pg-fetch-result>]: Unable to jump to row 1
> on PostgreSQL result index 3 in
> */usr/local/www/apache22/data/k2/test1_db.php* on line *29*

This suggests that there is no row 1 in your result-set.  I believe it
is zero-based, so try fetching row 0 if your query only returns 1 row.

> I don't understand what $resuts is returning - if it is an entire row,
> the one that the field is in that I am looking for, then why do I not
> get a printout of the text that is in that field? The row in the table
> is the second row and the field I am trying to retrieve is the 4th field.
$results as explained previously is just a pointer to a recordset.  This
analogy isn't brilliant, but think of your database table as a book.
Each row on a page within that book is a record, and the words in that
row are the data in the table's columns.

When you run a query, think of yourself looking at the book's index for
a given word.  The index will tell you the pages that word is on.
That's your $results - simply a pointer to your data.

You then need to turn to that page in the book (pg_fetch_* functions) to
start examining the lines for the word you want.  Once you've got your
line, you can find the word (column/data, from your array) you're
looking for.

Now turn that into PHP and SQL.  You run your query (looking in the
book's index) and the PostgreSQL driver will save the results into a
block of memory in your server's RAM, returning a resource identifier.
This is literally just saying "resource #3 is located at this location
in the computer's memory."  When you look up a record from that
result-set, PHP then knows where to look for the data.

I never really use the "or die" syntax, I tend to explicitly check the
return values of the functions.  Try this:

<?php
       $db = pg_connect("host=localhost port=5432 dbname=med user=med
password=0tscc71");

       // Note: according to
http://uk2.php.net/manual/en/language.types.boolean.php a resource
always evaluates to true,
       // therefore !$db may not evaluate to false when connection fails.
        if ($db === false)
        {
            die("Could not open connection to database server");
        }

         // generate and execute a query
        $query = "SELECT description FROM glossary_item WHERE
name='Alcohol'";
        $results = pg_query($db, $query);
        var_dump ($results);

       if ($results === false)
       {
          die("SQL query failed: " . pg_last_error($db));
       }
       else if (pg_num_rows($results) == 0)
       {
          // Only do this if you were expecting at least 1 row back
          die("SQL query returned no rows");
       }

       $results_formatted = pg_fetch_all($results);
       echo "<pre>"; // need this to show output better in a HTML page
       var_dump($results_formatted);
       echo "</pre>"; // need this to show output better in a HTML page

       /*
          $results_formatted will then be set out like follows:

          $results_formatted[row_index][column_name] = column_value
       */

        pg_close($db);
       ?>
> Am I querying correctly? The table is "glossary_item", the row I want
> is the one that is unique in containing the word "Alcohol" in the
> column "name"
>
> I changed:   $query = "SELECT * FROM glossary_item WHERE name=
> 'Alcohol'";
> same result
>
> Picture me tearing out my hair...
>

Regards,

Andy

pgsql-php by date:

Previous
From: Tomas Vondra
Date:
Subject: Re: display query results
Next
From: PJ
Date:
Subject: Re: display query results