A quick note for novice users: when gathering input from fields on a web form that maintains a database connection, *never* use pg_query to do queries from the field. Always sanitize input using pg_prepare and pg_execute.
(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)
pg_query — Esegue una query
pg_query() restituisce un risorsa risultato della query se
è stato possibile eseguire quest'ultima. Retituisce false
in caso di errore o se
la connessione non è valida. I dettagli dell'errore si possono
recuperare utilizzando la funzione pg_last_error()
se la connessione è valida.
pg_last_error() invia un comando SQL al
database PostgreSQL specificato dalla
risorsa connessione
. Il
parametro connessione
deve essere una connessione valida
restituita da pg_connect() o
pg_pconnect(). Il valore di ritorno di questa
funzione è una risorsa risultato che si può usare per accedere ai dati
attraverso altre funzioni PostgreSQL come
pg_fetch_array().
Nota:
connessione
è un parametro opzionale di pg_query(). Seconnessione
non è impostato, viene utilizzata la connessione di default, ovvero l'ultima connessione effettuata con pg_connect() o pg_pconnect(). Anche seconnessione
può essere omessa, ciò non è raccomandato, dal momento che questo può essere fonte di errori difficili da trovare nello script.
Nota:
Questa funzione si chiamava
pg_exec()
.pg_exec()
è ancora disponibile, per ragioni di compatibilità, ma si consiglia agli utenti di usare il nuovo nome.
Vedere anche pg_connect(), pg_pconnect(), pg_fetch_array(), pg_fetch_object(), pg_num_rows() e pg_affected_rows().
A quick note for novice users: when gathering input from fields on a web form that maintains a database connection, *never* use pg_query to do queries from the field. Always sanitize input using pg_prepare and pg_execute.
It would be better this way:<?php $result=pg_query($conn, "SELECT COUNT(*) AS rows FROM x WHERE a=b;"); if (!$result) { echo "query did not execute"; } if ($line = pg_fetch_assoc($result)) { if ($line['rows'] == 0) { echo "0 records" } } else { while ($row = pg_fetch_array($result)) { //do stuff with $row } }?> This solution doesn't raise the load of the system with the move of matching rows (perhaps 0,1, perhaps 100, 1000, ... rows)
expanding on the note left by "cmoore" -To check to see if the recordset returned no records,<?php $result=pg_query($conn, "SELECT * FROM x WHERE a=b;"); if (!$result) { echo "query did not execute"; } $rs = pg_fetch_assoc($result); if (!$rs) { echo "0 records" }?>-jack
$GLOBALS["PG_CONNECT"]=pg_connect(...);....function query ($sqlQuery,$var=0) { if (!$GLOBALS["PG_CONNECT"]) return 0; $lev=error_reporting (8); //NO WARRING!! $result=pg_query ($sqlQuery); error_reporting ($lev); //DEFAULT!! if (strlen ($r=pg_last_error ($GLOBALS["PG_CONNECT"]))) { if ($var) { echo "<p color=\"red\">ERROR:<pre>"; echo $sqlQuery; echo "</pre>"; echo $r; echo "</p>"; } close_db (); return 0; } return $result;}
One thing to note that wasn't obvious to me at first. If your query returns zero rows, that is not a "failed" query. So the following is wrong: $result=pg_query($conn, "SELECT * FROM x WHERE a=b;"); if (!$result) { echo "No a=b in x\n"; }pg_query returns FALSE if the query can not be executed for some reason. If the query is executed but returns zero rows then you get back a resul with no rows.
There was a typo in the code that I posted:<?php $result=pg_query($conn, "SELECT * FROM x WHERE a=b;"); if (!$result) { echo "query did not execute"; } if (pg_num_rows($result) == 0) { echo "0 records" } else { while ($row = pg_fetch_array($result)) { //do stuff with $row } }?>
Use pg_query to call your stored procedures, and use pg_fetch_result when getting a value (like a smallint as in this example) returned by your stored procedure.<?php$pgConnection = pg_connect("dbname=users user=me");$userNameToCheckFor = "metal";$result = pg_query($pgConnection, "SELECT howManyUsersHaveThisName('$userNameToCheckFor')");$count = pg_fetch_result($result, 0, 'howManyUsersHaveThisName');?>
Improving upon what jsuzuki said:It's probably better to use pg_num_rows() to see if no rows were returned, as that leaves the resultset cursor pointed to the first row so you can use it in a loop.Example:<?php $result=pg_query($conn, "SELECT * FROM x WHERE a=b;"); if (!$result) { echo "query did not execute"; } if (pg_num_rows($result) == 0) { echo "0 records" } else { while ($row = pg_fetch_array($result) { //do stuff with $row } }?>I, personally, also find it more readable.
Here is my small function to make it easier for me to use data from select queries (attention, it is sensitive to sql injection)<?phpfunction requestToDB($connection,$request){ if(!$result=pg_query($connection,$request)){ return False; } $combined=array(); while ($row = pg_fetch_assoc($result)) { $combined[]=$row; } return $combined;}?>Example:<?php$conn = pg_pconnect("dbname=mydatabase");$results=requestToDB($connect,"select * from mytable");//You can now access a "cell" of your table like this:$rownumber=0;$columname="mycolumn";$mycell=$results[$rownumber][$columname];var_dump($mycell);