数据库中的 BLOB 始终为 EMPTY

BLOB in Database is always EMPTY

我想将存储在文件系统上的包含 CalDAV 指令的文件存储到数据库中,以便与 SabreDAV 一起使用。以下代码片段创建了可以正常工作的文件:

$datei = fopen("./calendar/temp/tmp_event".$eventrand,"w");
$caldavcontent = "BEGIN:VCALENDAR[...]";
fwrite($datei, $caldavcontent,2000);
fclose($datei);

以下代码片段读取文件(其中包含所需数据,我已经检查过)并将其存储到数据库中:

$blob = fopen("./calendar/temp/tmp_event".$eventrand,'rb');
$stmt = $mysqli->prepare("INSERT INTO calendarobjects(calendardata,lastmodified,[...])
VALUES(?,".time().",[...]");
$stmt->bind_param("b",$blob);
$stmt->execute();

系统执行了查询,没有任何错误,但是应该存储到数据库中的BLOB 仍然是空的。有人知道哪里出了问题吗?

非常非常感谢!

此致

$blob 变量包含文件句柄,而不是二进制内容。

添加以下行以将数据读入变量:

$blob = fopen("./calendar/temp/tmp_event".$eventrand,'rb');

$fsize = filesize("./calendar/temp/tmp_event".$eventrand); 
$contents = fread($blob, $fsize); fclose($blob);


$stmt = $mysqli->prepare("INSERT INTO calendarobjects(calendardata,lastmodified,[...])
VALUES(?,".time().",[...]");
$stmt->bind_param("b",$contents);
$stmt->execute();

阅读文档。 fopen 没有给你文件内容。它会打开一个文件并为您提供处理该文件的句柄。您需要使用该句柄实际从文件中读取一些数据。