mysqli_stmt::send_long_data
(mysqli_stmt_send_long_data)以块为单位发送数据
适用 PHP 版本: PHP 5.3.0 及以上
函数说明: mysqli_stmt::send_long_data 是一个用于将长数据(比如大文件或长文本)传送到 MySQL 数据库的函数。该函数用于将数据流式传输到数据库而不需要将整个数据载入内存。它通常与预处理语句一起使用,特别是在插入或更新大数据时,可以避免内存的占用和性能瓶颈。
函数语法: mysqli_stmt::send_long_data(int $param_nr, string $data): bool
参数:
返回值: 返回布尔值,成功时返回 true,失败时返回 false。
示例:
假设我们正在将一个大的二进制文件(比如视频文件)插入到数据库中,我们可以使用 mysqli_stmt::send_long_data 来分段传输数据:
<?php // 创建数据库连接 $mysqli = new mysqli("localhost", "username", "password", "database"); // 检查连接 if ($mysqli->connect_error) { die("连接失败: " . $mysqli->connect_error); } // 准备一个预处理语句 $stmt = $mysqli->prepare("INSERT INTO files (filename, filedata) VALUES (?, ?)"); // 绑定参数 $stmt->bind_param("ss", $filename, $filedata); // 设置文件路径和名称 $filename = "largefile.dat"; // 打开文件并读取数据 $file = fopen("path/to/largefile.dat", "rb"); if ($file) { // 将文件内容分块传输 while (!feof($file)) { $filedata = fread($file, 8192); // 每次读取 8 KB 数据 $stmt->send_long_data(1, $filedata); // 将数据发送到第 1 个绑定参数 } fclose($file); } // 执行语句 $stmt->execute(); // 关闭连接 $stmt->close(); $mysqli->close(); ?>
示例代码说明:
在这个例子中,我们使用了 mysqli_stmt::send_long_data 来逐块读取并发送文件数据到数据库。文件通过指定每次读取 8 KB 数据来避免一次性加载整个文件,这对于大文件非常重要。我们使用了预处理语句,将文件名和文件数据绑定为参数并进行插入操作。