PHP 8.5.0 Alpha 1 available for testing

Voting

: max(seven, two)?
(Example: nine)

The Note You're Voting On

rw burgholzer is name at deq dot virginia dot gov
15 years ago
Regarding the failure to process them all now, then retrieve the results later, I found that all queries would return successfully if I added a further condition to your while loop in the "stack_query()" method.

By adding:
&& (pg_transaction_status($conn) === PGSQL_TRANSACTION_IDLE ) )

Every query executed with no errors.

<?php
$conn
= pg_connect("dbname=dbname host=localhost user=psql ");
if (
$conn === FALSE)
exit(
"Can't connect to db");

$q = array();
// send some queries
foreach (range(0, 50) as $i)
stack_query($q, $conn, "SELECT 'query $i' AS str;");
// receive them
while (true)
{
$left = stack_query($q, $conn);
echo
"$left left... ";
$result = pg_get_result($conn);
if (
$left == 0 && $result === FALSE)
break;
$row = pg_fetch_assoc($result);
// depending on race conditions, you wont get all your original queries here.
echo "got $row[str]\n";
}

function
stack_query(&$queries, $conn, $sql = FALSE)
{
if (
$sql !== FALSE)
$queries[] = $sql;
while (
count($queries) && !pg_connection_busy($conn) && (pg_transaction_status($conn) === PGSQL_TRANSACTION_IDLE ) )
pg_send_query($conn, array_shift($queries));
return
count($queries) + (pg_connection_busy($conn) ? 1 : 0);
}
?>

<< Back to user notes page

To Top