Re: display query results - Mailing list pgsql-php
From | PJ |
---|---|
Subject | Re: display query results |
Date | |
Msg-id | 4890D6F6.40709@videotron.ca Whole thread Raw |
In response to | display query results (PJ <af.gourmet@videotron.ca>) |
Responses |
Re: display query results
|
List | pgsql-php |
Annotated within text below: Andy Shellam wrote: > 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. Been there, done that. No change. > > >> 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); > ?> Tried your coding - returns: resource(3) of type (pgsql result) SQL query returned no rows The row is there... isn't that what were asking for? To go by the book, I even changed the description to * as noted before below. Something is rotten in Denmark. This is getting ridiculous - I have followed the instructions as specified in the Postgresql documentation and examples - and it just doesn't work. The db is like this.. int4 ||int4 || varchar(32)|| text _item_id || glossary_id || name || description _ 2 || 1 || Alcohol || One of thetwo major.... blah...blah.. blah >> 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 >