2015-06-10 12 views
24

ich habe versucht, einige Daten in die Datenbank einfügen, aber ich habe diesen Fehler „Fehler beim QUERY-Paket sendetFehler beim Senden von QUERY-Paket

$insertDeta = $conPat->prepare("insert into table1(data) VALUES(:data)"); 
$insertDeta->bindParam(':data',$data); 
$conPat->beginTransaction();  
    $insertDeta->execute(); 
$conPat->commit(); 

aber was ich denke, das Problem ist, dass Größe der Daten ist über 16 MB.
der Datentyp der Spalte wird als longtext, die ich denke, kann Daten so groß wie 4 GB halten.

Ich weiß nicht, ob PDOs Probleme beim Ausführen der Abfrage oder Übertragung von 16 MB Daten an die Datenbank hat.
Das ist die einzige Vermutung, die ich machen kann, da mysql die Daten in Pakete senden kann und das Paket nicht Daten so groß wie 16MB halten kann.

Antwort

1

Sie können die WHERE-Klausel in einer INSERT-Anweisung nicht haben.

insert into table1(data) VALUES(:data) where sno ='45830'

Sollte

insert into table1(data) VALUES(:data)


aktualisieren sein: Sie haben entfernt, dass aus dem Code (Ich gehe davon aus Sie den Code in falsch kopiert). Sie möchten Ihre zulässige Paketgröße erhöhen:

SET GLOBAL max_allowed_packet=32M

Ändern Sie die 32M (32 Megabyte) nach oben/unten je nach Bedarf. Here is a link to the MySQL documentation on the subject.

+0

SET GLOBAL berichtet produziert max_allowed_packet = 32M ist nicht in MySQL arbeiten, sagt sie ungültig Argument. aber wenn ich eine Anfrage auf SET GLOBAL feuern max_allowed_packet = 524288000; Ich erhalte diesen Fehler "Überprüfen Sie das Handbuch, das Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe 'SET GLOBAL max_allowed_packet = 524288000' in Zeile 1 entspricht" –

+0

Sie können 'SHOW VARIABLES LIKE 'max_allowed_packet' ausführen, um zu sehen, was Ihr max Wert ist eigentlich. Sind Sie auf einem freigegebenen Host? Wenn ja, dann könnte es für Sie deaktiviert sein. – cjhill

+0

Ist das persistent oder müssen Sie das nach dem Neustart von mysql erneut tun? –

20

Sie erraten MySQL Begrenzung der Daten für die Größe haben, müssen Sie Ihre Abfrage in kleine Gruppe von Datensätzen brechen oder Sie können von Ihrem max_allowed_packet ändern SET GLOBAL max_allowed_packet=524288000; mit

+0

Ich setze max_allowed_packet auf 256M in ** my.ini ** Datei, aber es hat nicht funktioniert. –

+0

und wenn ich eine Anfrage an SET GLOBAL auslösen max_allowed_packet = 524288000; Ich erhalte diesen Fehler "_überprüfe das Handbuch, das deiner MySQL Server Version entspricht, damit die richtige Syntax in der Nähe von 'SET GLOBAL max_allowed_packet = 524288000' in Zeile 1_" –

9

Sie können auch diesen Fehler haben, wenn die Variable wait_timeout ist zu niedrig.

Wenn ja, können Sie es höher eingestellt wie folgt aus:

SET GLOBAL wait_timeout 10 

Dies war die Lösung für den gleichen Fehler in meinem Fall.

3

In /etc/my.cnf add:

max_allowed_packet=32M 

Es ist für mich gearbeitet.Sie können, indem Sie in phpMyAdmin überprüfen und eine SQL-Befehlsfenster öffnen und ausführen:

SHOW VARIABLES LIKE 'max_allowed_packet' 
16

Sie dieses Problem, indem Sie wenige Schritte lösen können:

1) Öffnen Sie Terminal-Fenster

2) bitte folgenden Befehl in Terminal

ssh [email protected] port 

3) schreiben Geben Sie root-Passwort

4) Jetzt ist Ihren Server my.cnf-Datei mit folgendem Befehl

nano /etc/my.cnf 

, wenn der Befehl nicht erkannt wird tun, um dieses zuerst bearbeiten oder versuchen vi dann wiederholen: yum install nano.

ODER

vi /etc/my.cnf 

5) Fügen Sie die Zeile unter dem Abschnitt [mysqld]. : Strg + X (Exit-Datei)

7) neu starten Sie dann Ihren MySQL-Server mit dem Befehl folgenden

/etc/init.d/mysql stop 
/etc/init.d/mysql start 

max_allowed_packet=524288000 (obviously adjust size for whatever you need) 
wait_timeout = 100 

6) Strg + O (speichern) und dann ENTER (bestätigen), dann 8) Sie können im PHPMyAdmin überprüfen oder ein SQL-Befehlsfenster öffnen und ausführen:

SHOW VARIABLES LIKE 'max_allowed_packet' 

Dies funktioniert für mich. Ich hoffe, es sollte für dich funktionieren.

+0

Der [Standardwert] (https://dev.mysql.com/ doc/refman/5.7/de/server-system-variables.html # sysvar_wait_timeout) für 'wait_timeout' ist 28800 Sekunden. Warum würdest du es auf 100 senken? – andreszs

2

Ich stieß auf einen seltenen Rand Fall in Cygwin, wo ich diesen Fehler bei der Ausführung exec('rsync'); irgendwo vor der Abfrage erhalten würde. Könnte ein allgemeines PHP Problem sein, aber ich konnte das nur in cygwin mit rsync reproduzieren.

$pdo = new PDO('mysql:host=127.0.0.1;dbname=mysql', 'root'); 
var_dump($pdo->query('SELECT * FROM db')); 
exec('rsync'); 
var_dump($pdo->query('SELECT * FROM db')); 

object(PDOStatement)#2 (1) { 
    ["queryString"]=> 
    string(16) "SELECT * FROM db" 
} 
PHP Warning: Error while sending QUERY packet. PID=15036 in test.php on line 5 
bool(false) 

Bug in https://cygwin.com/ml/cygwin/2017-05/msg00272.html

Verwandte Themen