Aktueller Standort: Startseite> Neueste Artikel> Was sind die üblichen Fehler bei der Verwendung von mySQLI_STMT :: SEND_LONG_DATA? Wie kann man es schnell lokalisiert und lösen?

Was sind die üblichen Fehler bei der Verwendung von mySQLI_STMT :: SEND_LONG_DATA? Wie kann man es schnell lokalisiert und lösen?

gitbox 2025-08-16

1. Fehler 1: Die Anrufreihenfolge von send_long_data ist falsch


MySQLI_STMT :: SEND_LONG_DATA muss angerufen werden, bevor die Anweisung ausgeführt wird. Wenn Sie versuchen, send_long_data nach dem Aufrufen von Execute () zu verwenden, tritt ein Fehler auf. Häufige Fehlermeldungen umfassen:

  • WARNUNG: MySQLI_STMT :: SEND_LONG_DATA () erwartet Parameter 1 Ressource, null gegeben.

Dieser Fehler ist auf die Tatsache zurückzuführen, dass der Handle mit der SQL -Anweisung nicht ordnungsgemäß erstellt wird, wenn send_long_data aufgerufen wird.

Lösung <br> Stellen Sie sicher, dass Sie send_long_data verwenden, um lange Daten zu übergeben, bevor Sie SQL -Anweisungen ausführen. Die richtige Reihenfolge sollte sein:

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$largeData</span></span><span>);  </span><span><span class="hljs-comment">// Senden Sie Big Data</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();  </span><span><span class="hljs-comment">// Ausführungsanweisung</span></span><span>
</span></span>

2. Fehler 2: Falsch Parameterindex

Problembeschreibung
SEND_LONG_DATA muss den Index des Parameters korrekt angegeben werden. Wenn beispielsweise mehrere Platzhalter in einer SQL -Anweisung enthalten sind, muss der korrekte Parameterindex übergeben werden.

  • WARNUNG: MySQLI_STMT :: SEND_LONG_DATA () erwartet Parameter 1 Ressource, null gegeben.

Dieser Fehler tritt normalerweise auf, wenn kein korrekter Index angegeben ist, wodurch PHP keine korrekten Daten gefunden hat.

Lösung <br> Stellen Sie sicher, dass der Index in send_long_data korrekt angegeben ist. Der Index beginnt normalerweise bei 0, was den ersten Platzinhaber in der SQL -Anweisung angibt. Zum Beispiel:

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$largeData</span></span><span>);  </span><span><span class="hljs-comment">// Übergeben Sie lange Daten für den ersten Platzhalter korrekt</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

3. Fehler 3: Die Datengröße überschreitet die MySQL -Konfigurationsgrenze

Problembeschreibung
MySQLI_STMT :: SEND_LONG_DATA wird verwendet, um Big Data zu verarbeiten. Wenn die Daten jedoch die in der MySQL -Konfiguration festgelegte maximale Datengröße überschreiten, verursacht dies einen Übertragungsfehler. Dies manifestiert sich normalerweise als Fehlermeldung:

  • MySQL -Fehler: Daten zu lang für die Spalte.

Dieser Fehler bezieht sich normalerweise mit dem Parameter max_allowed_packet , einer Option in der MySQL -Konfigurationsdatei, die die maximale Paketgröße für einen einzelnen Senden steuert.

Lösung <br> Um dieses Problem zu beheben, müssen Sie zunächst den Parameter max_allowed_packet in der MySQL -Konfigurationsdatei überprüfen und anpassen. Sie können die aktuelle Konfiguration über den folgenden Befehl anzeigen:

 <span><span><span class="hljs-keyword">SHOW</span></span><span> VARIABLES </span><span><span class="hljs-keyword">LIKE</span></span><span> </span><span><span class="hljs-string">'max_allowed_packet'</span></span><span>;
</span></span>

Wenn der aktuelle Wert gering ist, können Sie den Wert dieses Parameters zur Datei my.cnf oder my.ini hinzufügen und den MySQL -Dienst neu starten:

 <span><span><span class="hljs-attr">max_allowed_packet</span></span><span> = </span><span><span class="hljs-number">64</span></span><span>M
</span></span>

4. Fehler 4: Datentyp -Missverhältnis

Problembeschreibung
Wenn send_long_data zum Senden langer Daten verwendet wird, muss sichergestellt werden, dass die übergebene Art der übergebenen Daten mit der Art von Platzhalter in der SQL -Anweisung übereinstimmt. Wenn der Platzhaltertyp beispielsweise Blob ist, müssen die bestandenen Daten binäre Daten sein.

Wenn die Datentypen nicht übereinstimmen, kann beispielsweise ein Fehler verursacht werden:

  • WARNUNG: MySQLI_STMT :: SEND_LONG_DATA () erwartet, dass Parameter 2 String, Ressource angegeben wird.

Lösung <br> Stellen Sie sicher, dass der übergebene Datentyp mit dem Platzhaltertyp in der SQL -Anweisung übereinstimmt. Wenn der Platzhaltertyp eine Zeichenfolge ist, sollten die Daten eine Zeichenfolge sein. Wenn es sich um Binärdaten ( B ) handelt, sollten die Daten im binären Format vorliegen.

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (file_content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"b"</span></span><span>, </span><span><span class="hljs-variable">$binaryData</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$binaryData</span></span><span>);  </span><span><span class="hljs-comment">// Senden Sie Binärdaten</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span></span>

5. Fehler 5: Die Verbindung ist nicht aktiv oder zeitlich festgelegt

Problembeschreibung
send_long_data muss eine aktive Datenbankverbindung aufbewahren, die einen Fehler verursacht, wenn die Verbindung zeitlich abgestimmt ist oder während der Ausführung geschlossen ist. Die Fehlermeldung kann sein:

  • Fehler: Verlorene Verbindung zum MySQL -Server während der Abfrage.

Dieses Problem tritt normalerweise auf, wenn die Datenbank nicht lange betrieben wird oder wenn eine große Datenmenge hochgeladen wird, wird die Verbindung unterbrochen.

Lösung <br> Stellen Sie sicher, dass die Datenbankverbindung während des Betriebs aktiviert bleibt. Wenn die Datenübertragungszeit lang ist, können Sie Timeout vermeiden, indem Sie PHP von max_execution_time oder MySQLs Wait_Timeout anpassen.

 <span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'max_execution_time'</span></span><span>, </span><span><span class="hljs-number">300</span></span><span>);  </span><span><span class="hljs-comment">// PHP Maximale Ausführungszeit 5 Minute</span></span><span>
</span></span>

Gleichzeitig ist es auch möglich, die Verarbeitung in Stapeln in Betracht zu ziehen, wenn eine große Datenmenge gesendet wird, um zu vermeiden, dass zu viele Daten gleichzeitig gesendet werden und Verbindungen zu einem Verlust von Verbindungen führen.

6. Fehler 6: Parameter nicht richtig gebunden

Frage Beschreibung <br> Bei der Ausführung von SQL -Anweisungen müssen alle Parameter korrekt gebunden sein. Wenn bei Bindungsparametern ein Fehler auftritt, kann send_long_data nicht ordnungsgemäß funktionieren. Wenn beispielsweise der Parameter Bind_param -Bindung verwendet wird, die Daten jedoch nicht erfolgreich übergeben werden, tritt ein Problem auf.

Lösung <br> Stellen Sie vor der Ausführung der SQL -Anweisung sicher , dass Sie alle erforderlichen Parameter korrekt binden, und überprüfen Sie den Rückgabewert, um zu bestätigen, dass die Bindung erfolgreich ist.

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO large_data (content) VALUES (?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"s"</span></span><span>, </span><span><span class="hljs-variable">$data</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">execute</span></span><span>()) {
    </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$largeData</span></span><span>);  </span><span><span class="hljs-comment">// Stellen Sie sicher, dass Sie lange Daten nach Bindungsparametern senden</span></span><span>
}
</span></span>