I'm getting the Warning Error while sending QUERY packet in PID= when I use a SELECT statement that only gets 5 rows of data from 2 columns, then make the script sleep for 10 minutes before waking up to continue an INSERT into the db.
If I close the connection after the SELECT statement and reopen the connection just before the INSERT, then everything works fine and no error is produced.
I can't figure out why this is happening. I'm on a public shared server.
Select
The values selected are:
Seller which is 10 characters in length and Token which is 872 in length.
include('con.php');
if ($result = $con->query("SELECT Seller,Token FROM `Sellers`")) {
$sellers = $result->fetch_all(MYSQLI_ASSOC);
$result->close();
}
$con->close();
Sleep
sleep(600);
Insert
All values being inserted are minimal in length of which 21 characters is the longest in the column jobType. Total of 5 rows being inserted from the foreach loop.
include('con.php');
foreach(...) {
$insert = "INSERT INTO `jobStatus` (ack, jobId, RefId, Type, Status, error, percent, Seller, creationTime, completionTime) VALUES ('$ack', '$jid', '$frid', '$jtyp', '$jstat', '$errc', '$pcom', '$sid', '$crtime', '$cotime')";
if($con->query($insert)) {
echo "inserted into db successfully.\n";
} else {
echo "not inserted into db. Query Failed.\n";
}
}
$con->close();
Above code works without an error because of closing and reopening the connection in between the statements.
I want it to work without the error when I keep the connection open after the SELECT and then closing the connection after the INSERT.
Can someone point out what I need to do in order to accomplish this?
Note: I already have the set_time_limit set to 0 in my script.
set_time_limit(0);
Here is the code which produces the error.
Code that causes error
Select
include('con.php');
if ($result = $con->query("SELECT Seller,Token FROM `Sellers`")) {
$sellers = $result->fetch_all(MYSQLI_ASSOC);
$result->close();
}
Sleep
sleep(600);
Insert
foreach($sellers as $seller) {
$insert = "INSERT INTO `jobStatus` (ack, jobId, RefId, Type, Status, error, percent, Seller, creationTime, completionTime) VALUES ('$ack', '$jid', '$frid', '$jtyp', '$jstat', '$errc', '$pcom', '$sid', '$crtime', '$cotime')";
if($con->query($insert)) {
echo "inserted into db successfully.\n";
} else {
echo "not inserted into db. Query Failed.\n";
}
}
$con->close();
Update:
Here are the results of SHOW VARIABLES LIKE '%timeout'
$SESSION_VARIABLES = array(
array(
"Variable_name" => "connect_timeout",
"Value" => "10",
),
array(
"Variable_name" => "delayed_insert_timeout",
"Value" => "300",
),
array(
"Variable_name" => "innodb_flush_log_at_timeout",
"Value" => "1",
),
array(
"Variable_name" => "innodb_lock_wait_timeout",
"Value" => "50",
),
array(
"Variable_name" => "innodb_rollback_on_timeout",
"Value" => "OFF",
),
array(
"Variable_name" => "interactive_timeout",
"Value" => "30",
),
array(
"Variable_name" => "lock_wait_timeout",
"Value" => "86400",
),
array(
"Variable_name" => "net_read_timeout",
"Value" => "30",
),
array(
"Variable_name" => "net_write_timeout",
"Value" => "60",
),
array(
"Variable_name" => "slave_net_timeout",
"Value" => "60",
),
array(
"Variable_name" => "thread_pool_idle_timeout",
"Value" => "60",
),
array(
"Variable_name" => "wait_timeout",
"Value" => "30",
),
);
SELECT @@wait_timeoutandSELECT @@interactive_timeout... However I would definitely consider using mysqli::ping to reconnect if necessary