PHP Conference Japan 2024

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_data分塊傳送資料

說明

物件導向風格

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

程序式風格

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

允許將參數資料分批(或區塊)發送到伺服器,例如,當 blob 的大小超過 max_allowed_packet 的大小時。可以多次呼叫此函式來傳送欄位的字元或二進位制資料值的部分內容,該欄位必須是 TEXT 或 BLOB 資料類型之一。

參數

statement

僅限程序式風格:由 mysqli_stmt_init() 返回的 mysqli_stmt 物件。

param_num

指示要將資料與哪個參數關聯。參數從 0 開始編號。

data

包含要傳送資料的字串。

傳回值

成功時傳回 true,失敗時傳回 false

範例

範例 #1 物件導向風格

<?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();
?>

參見

新增註釋

使用者貢獻的筆記 3 則筆記

ChrisH
5 年前
如果您嘗試寫入單個超過 max_allowed_packet 的欄位,則此函數將無法幫助您(與上述文件範例所示相反)。

MySQL 中的參數仍然會受到每個欄位 max_allowed_packet 的限制,因此您會收到類似以下的錯誤:

「mysqli_sql_exception: 透過 mysql_send_long_data() 設定的預備語句參數長度超過 'max_long_data_size' 位元組」

此函數唯一真正的用例似乎是您正在寫入多個長欄位,而這些欄位組合起來會超過 max_allowed_packet。
Gustavo Narea
18 年前
補充說明

'max_allowed_packet' 是一個 MySQL 變數;它不是 PHP 函數/變數/常數。

更多資訊:https://mysqldev.dev.org.tw/doc/refman/4.1/en/packet-too-large.html

希望有幫助。
DimeCadmium
3 年前
關於 ChrisH 的說明,您必須使用相同的 $param_nr 多次呼叫此函數,才能先傳送 max_allowed_packet 位元組,然後再傳送下一個,依此類推。因此,您可能需要對變化的 substr() 索引進行 for 迴圈,或者等等。
To Top