Ce face mysqli_stmt_send_long_data
Un pachet trimis la MySQL nu poate depăși setarea max_allowed_packet. Pentru valori mari, legi parametrul cu tipul b și o variabilă null, apoi trimiți datele în bucăți cu mysqli_stmt_send_long_data. Bucățile se adună pe server și sunt folosite la mysqli_stmt_execute.
$param_num este poziția semnului ?, începând de la 0.
Parametri
| Parametru | Descriere |
|---|---|
$statement |
Interogarea pregătită. |
$param_num |
Poziția parametrului, de la 0. |
$data |
Bucata de date trimisă. |
Ce returnează
true la succes.
Exemple
Exemplul 1: Salvarea unui fișier mare
Presupunem un tabel fisiere cu o coloană continut de tip LONGBLOB.
<?php
$conn = mysqli_connect("localhost", "ana", "parola_ta", "magazin");
$stmt = mysqli_prepare($conn, "INSERT INTO fisiere (nume, continut) VALUES (?, ?)");
$nume = "catalog.pdf";
$gol = null;
mysqli_stmt_bind_param($stmt, "sb", $nume, $gol);
$f = fopen("catalog.pdf", "rb");
while (!feof($f)) {
mysqli_stmt_send_long_data($stmt, 1, fread($f, 1024 * 1024));
}
fclose($f);
mysqli_stmt_execute($stmt);
echo "Salvat cu id " . mysqli_stmt_insert_id($stmt);
Rezultat (cu un server MySQL, tabelul fisiere și un fișier catalog.pdf)
Salvat cu id 1
Greșeli frecvente
- Dai datele direct în variabila legată cu
b. Pentru tipulb, valoarea vine doar dinsend_long_data; variabila trebuie să rămânănull.
Comenzi înrudite
mysqli_prepare: Pregătește o interogare SQL cu semne ? în loc de valori. Este metoda sigură împotriva SQL injection.mysqli_stmt_reset: Resetează o interogare pregătită: renunță la rândurile necitite și la datele trimise cu send_long_data.