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.
(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
送信するデータを含む文字列。
成功した場合に 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();
?>
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.
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.
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.
send_long_data() these function is normaly used to store Data in Binary blob field. But if the table is UTF8 and connection charset it does not expect binary data (for example images) it take utf8 Data.
This mean you have to do utf8_encode bevore sending binary data.