PHP 8.4.2 Released!

mysqli_stmt::send_long_data

mysqli_stmt_send_long_data

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::send_long_data -- mysqli_stmt_send_long_dataSendet Daten blockweise

Beschreibung

Objektorientierter Stil

public mysqli_stmt::send_long_data(int $param_num, string $data): bool

Prozeduraler Stil

mysqli_stmt_send_long_data(mysqli_stmt $statement, int $param_num, string $data): bool

Damit werden Parameter blockweise zum Datenbank-Server geschickt, z. B. wenn die Größe eines BLOBs die Größe max_allowed_packet überschreitet. Die Funktion kann mehrmals aufgerufen werden, um Teile von Textdaten oder Binärdaten für eine Tabellenspalte zu verschicken. Die Tabellenspalte muss dabei den Typ TEXT oder BLOB haben.

Parameter-Liste

statement

Nur bei prozeduralem Aufruf: ein von mysqli_stmt_init() zurückgegebenes mysqli_stmt-Objekt.

param_num

Zeigt an, für welchen Parameter Daten geschickt werden. Die Parameter sind von Null an durchnummeriert.

data

Eine Zeichenkette, die die Daten enthält, die gesendet werden sollen.

Rückgabewerte

Gibt bei Erfolg true zurück. Bei einem Fehler wird false zurückgegeben.

Beispiele

Beispiel #1 Objektorientierter Stil

<?php
$stmt
= $mysqli->prepare("INSERT INTO messages (message) VALUES (?)");
$null = NULL;
$stmt->bind_param("b", $null);
$fp = fopen("messages.txt", "r");
while (!
feof($fp)) {
$stmt->send_long_data(0, fread($fp, 8192));
}
fclose($fp);
$stmt->execute();
?>

Siehe auch

add a note

User Contributed Notes 3 notes

up
3
ChrisH
5 years ago
If you are trying to write a single field which is above max_allowed_packet then this function will not help you (contrary to what the documentation example seems to show above).

Parameters in MySQL are still restricted by max_allowed_packet on a per-field basis so you will get an error like:

“mysqli_sql_exception: Parameter of prepared statement which is set through mysql_send_long_data() is longer than 'max_long_data_size' bytes”

The only real use case for this function seems to be if you are writing multiple long fields which when combined would go over max_allowed_packet.
up
3
Gustavo Narea
18 years ago
Just in case:

'max_allowed_packet' is a MySQL variable; it is not a PHP function/variable/constant.

Further info: http://dev.mysql.com/doc/refman/4.1/en/packet-too-large.html

HTH.
up
0
DimeCadmium
3 years ago
To ChrisH's note, you must call this function multiple times with the same $param_nr, to send the first max_allowed_packet bytes, then the next, and so on. So you might need to do a for loop over changing substr() indexes, or etc.
To Top