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 — データをブロックで送信する
説明
オブジェクト指向型
手続き型
パラメータのデータを、サーバーに分割して送信します。例えば blob のサイズが
max_allowed_packet
を越えてしまう場合などに使用します。
この関数は、カラムに文字やバイナリのデータを送信するために複数回
コールすることが可能です。そのカラムの型は TEXT あるいは BLOB である
必要があります。
パラメータ
stmt
手続き型のみ: mysqli_stmt_init() が返す mysqli_stmt オブジェクト。
param_num
-
データに関連付けるパラメータを示します。 パラメータの番号は 0 から始まります。
data
-
送信するデータを含む文字列。
例
例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();
?>
+add a note
User Contributed Notes 3 notes
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.
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.
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.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google