Aktueller Standort: Startseite> Neueste Artikel> Was ist die MySQLI_STMT :: SEND_LONG_DATA -Funktion? Was sind die grundlegenden Nutzung und Vorsichtsmaßnahmen?

Was ist die MySQLI_STMT :: SEND_LONG_DATA -Funktion? Was sind die grundlegenden Nutzung und Vorsichtsmaßnahmen?

gitbox 2025-08-28

Was ist die MySQLI_STMT :: SEND_LONG_DATA -Funktion? Was sind die grundlegenden Nutzung und Vorsichtsmaßnahmen?

In der MySQLI -Erweiterung von PHP ist MySQLI_STMT :: SEND_LONG_DATA eine Funktion, mit der Big Data (z. B. große Text, große Binärdaten usw.) an eine MySQL -Datenbank gesendet werden. Bei der Behandlung von Dateninsertionen in großem Maßstab kann die herkömmliche Methode von Bind_param () durch die Datengröße begrenzt werden, und send_long_data () ist besonders wichtig. In diesem Artikel wird die grundlegende Verwendung von MySQLI_STMT :: send_long_data und Vorsichtsmaßnahmen vorgestellt, wenn sie es verwenden.

1. Funktionsprototyp

 <span><span>mysqli_stmt::</span><span><span class="hljs-title function_ invoke__">send_long_data</span></span><span>(</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$param_nr</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
  • $ param_nr : Die Parameternummer der zugesandten Daten. Es entspricht der Position der ? Platzhalter in der SQL -Erklärung ab 0.

  • $ data : stellt die zu sendenden Big Data dar, normalerweise eine große Zeichenfolge oder binäre Daten.

Rückgabewert: Return true on Success und falsch beim Scheitern.

2. Verwenden Sie Szenarien von send_long_data

send_long_data wird hauptsächlich verwendet, um große Datenmengen in MySQL -Datenbanken zu übertragen. Normalerweise wird MySQLI_STMT :: BIND_PARAM () zum Binden von Parametern verwendet. Wenn jedoch die Datenmenge groß ist (zum Beispiel der Inhalt einer großen Datei, große Textfelder usw.), wird sie in der PHP -Konfigurationsdatei durch max_allowed_packet eingeschränkt. Um diese Einschränkung zu vermeiden, kann die Methode send_long_data verwendet werden, um Datenbrocken an die MySQL -Datenbank zu senden.

3. Grundnutzung

Angenommen, wir haben eine Tabelle mit der folgenden Struktur:

 <span><span><span class="hljs-keyword">CREATE</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> files (
    id </span><span><span class="hljs-type">INT</span></span><span> AUTO_INCREMENT </span><span><span class="hljs-keyword">PRIMARY</span></span><span> KEY,
    name </span><span><span class="hljs-type">VARCHAR</span></span><span>(</span><span><span class="hljs-number">255</span></span><span>),
    file_data LONGBLOB
);
</span></span>

In dieser Tabelle speichern wir den Dateinamen und die entsprechenden Binärdaten der Datei. Wir fügen große Dateidaten in folgenden Schritten ein.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Erstellen Sie eine Datenbankverbindung</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);

</span><span><span class="hljs-comment">// Überprüfen Sie die Verbindung</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Verbindung ist fehlgeschlagen: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Vorbereiten SQL Stellungnahme</span></span><span>
</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 files (name, file_data) VALUES (?, ?)"</span></span><span>);

</span><span><span class="hljs-comment">// Binden Sie den ersten Parameter(Dateiname)</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">$name</span></span><span>);

</span><span><span class="hljs-comment">// Dateidaten lesen</span></span><span>
</span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-string">'large_file.txt'</span></span><span>;
</span><span><span class="hljs-variable">$fileData</span></span><span> = </span><span><span class="hljs-title function_ invoke__">file_get_contents</span></span><span>(</span><span><span class="hljs-variable">$filePath</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__">send_long_data</span></span><span>(</span><span><span class="hljs-number">1</span></span><span>, </span><span><span class="hljs-variable">$fileData</span></span><span>);

</span><span><span class="hljs-comment">// 设置Dateiname</span></span><span>
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>);

</span><span><span class="hljs-comment">// implementieren SQL Stellungnahme</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">// Schließen Sie die Verbindung</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Im obigen Code binden wir den Dateinamen ( en repräsentiert den String -Typ) über die Methode bind_param () . Dateidaten werden über die Methode send_long_data () gesendet, sodass große Dateidaten übertragen werden können.

4. Der Arbeitsmechanismus von send_long_data

  • Senden Sie Daten in Töpfen : SEND_LONG_DATA sendet Daten in MySQL in Teilen und binden nicht alle Daten gleichzeitig wie das herkömmliche Bind_param () . Wenn die Daten groß sind, kann die Verwendung von send_long_data übermäßige Speicherverwendung und PHP -Ausführungszeitbeschränkungen vermeiden.

  • Unterstützt Big -Datentypen : SEND_LONG_DATA wird hauptsächlich für die Datenübertragung von Longblob- und Longtext -Typen verwendet, insbesondere beim Hochladen oder Einfügen großer Dateien.

  • Parameternummer : SEND_LONG_DATA verwendet die Parameternummer, um den zugesandten Datenblock zu identifizieren. Die Nummer startet ab 0. Wenn send_long_data mehrmals aufgerufen wird, müssen Sie die richtige Parameternummer sicherstellen.

5. Dinge zu beachten

  1. MySQL -Konfigurationsbeschränkungen : Bei Verwendung send_long_data müssen Sie auf die Größe des Parameters max_allowed_packet in der MySQL -Konfiguration achten. Wenn die übertragenen Daten diese Grenze überschreiten, schlägt die Einfügung fehl. Sie können die aktuelle Konfiguration über die folgende SQL -Anweisung überprüfen:

     <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 Sie diesen Wert ändern müssen, können Sie ihn in der MySQL -Konfigurationsdatei ändern:

     <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>
  2. PHP -Konfigurationsbeschränkungen : Zusätzlich können die Parameter upload_max_filesize und post_max_size in der PHP -Konfigurationsdatei auch die Größe der Datei -Uploads einschränken. Stellen Sie bei Verwendung von send_long_data sicher, dass diese Konfigurationen groß genug sind.

  3. Timeout-Einstellung für die Datenbankverbindung : Da send_long_data Big-Data in Teilen übertragen, können Langzeitdatenbankvorgänge eine Verbindungszeitüberschreitung verursachen. Dies kann vermieden werden, indem die Zeitüberschreitungseinstellungen für MySQL oder PHP angepasst werden.

  4. Die Reihenfolge der Datenübertragung : Die Reihenfolge des Call of send_long_data stimmt mit der Reihenfolge der Bindungsparameter überein. Stellen Sie sicher, dass die Daten, die jedes Mal gesendet werden, der korrekten Parameternummer entspricht.

6. Zusammenfassung

MySQLI_STMT :: SEND_LONG_DATA ist eine sehr praktische Funktion, insbesondere wenn es erforderlich ist, große Dateien oder Big -Data einzufügen, kann es die Einschränkungen herkömmlicher Parameterbindungsmethoden effektiv lösen. Indem wir diese Funktion vernünftigerweise verwenden, können wir das reibungslose Einfügen von Big Data sicherstellen und gleichzeitig das Problem des unzureichenden Speichers oder der Übertragungszeitüberschreitung vermeiden. Sie müssen jedoch auch auf die relevante Konfiguration von MySQL und PHP achten, um sicherzustellen, dass die Datenübertragung nicht eingeschränkt ist.