phpday 2025 - Call For Papers

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_dataEnviar datos en bloques

Descripción

Estilo orientado a objetos

mysqli_stmt::send_long_data(int $param_nr, string $data): bool

Estilo por procedimientos

mysqli_stmt_send_long_data(mysqli_stmt $stmt, int $param_nr, string $data): bool

Permite el envío de datos de parámetros en piezas al servidor (o trozos), p.ej. si el tamaño de un blob excede el tamaño de max_allowed_packet. Esta función puede llamarse múltiples veces para enviar las partes de un valor de datos de carácter o binarios de una columna, la cual debe ser del tipo de datos TEXT o BLOB.

Parámetros

stmt

Sólo estilo por procediminetos: Un identificador de declaraciones devuelto por mysqli_stmt_init().

param_nr

Indica qué parámetro asociar con los datos. Los parámetros son numerados comenzando por el 0.

data

Una cadena que contiene los datos a enviar.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Estilo orientado a objetos

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

Ver también

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