Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: Error while sending QUERY packet

dartvaneri [20.02.2019 10:19:25]

#

Mulla on jo pitkään ollut ongelmana, että tietokantakyselyjen teko heittää toisinaan(säännöllisyyttä en ole löytänyt) virheen:

Error while sending QUERY packet.

Joka kerta tuo virhe on tullut pienistä kyselyistä(tauluissa vain muutamia rivejä), joissa haetaan tai päivitetään ID:n perusteella riviä. Virhe tuli viimesimmäksi tällaisesta kyselystä:

$HaeKayttaja = $PDO->prepare("SELECT * FROM users WHERE ID = ?");
$HaeKayttaja->execute(array($_SESSION["User"]["ID"]));

MySQL:stä oon muuttanut seuraavat muuttujat, ei apua:

wait_timeout = 28800
max_allowed_packet = 1G

Mitähän tuon ongelman ratkaisemiseksi voisi vielä kokeilla?


Edit. Tuota ongelmaa on ilmennyt toistaiseksi vain Websocket-palvelimen tekemissä kyselyissä.

Metabolix [08.03.2019 18:45:05]

#

Onko yhteyden käytössä ohjelmassa pitkiä taukoja? Oletko kokeillut pitää yhteyden hengissä esimerkiksi lähettämällä ajastetusti jotain turhia kyselyitä, vaikka 10 sekunnin välein "SELECT 1"?

Purkkaratkaisuna ainakin voi laittaa kyselyn funktioon, tunnistaa virhetilanteen ja luoda silloin uuden yhteyden.

function query_once($sql, ...$args) {
	global $PDO;
	$q = $PDO->prepare($sql);
	$q->execute($args);
	return $q;
}
function query($sql, ...$args) {
	global $PDO, $PDO_ARGS;
	try {
		query_once($sql, ...$args);
	} catch (PDOException $e) {
		$PDO = new PDO(...$PDO_ARGS);
		query_once($sql, ...$args);
	}
}

dartvaneri [17.03.2019 16:01:22]

#

Kyllä on pitkiä taukoja yhteyden käytössä, tunteja, jopa päivä. En ole kokeillut lähetellä aktivoivia kyselyitä, pitääpä kokeilla tuota.

dartvaneri [24.04.2019 11:05:25]

#

Nyt kerkesin kurkaamaan. Tuon kyseisen websocket-palvelin kirjaston tick-funktiossa tehdään 6 kyselyä ja funktio käsittääkseni suoritetaan vähintään sekunnin välein. Joten ei liene pitkistä tauoista johtuva tuo ongelma.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta