数据库中的BLOB始终为EMPTY

时间:2016-04-14 09:34:04

标签: php mysql blob

我想将包含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保持为空。有没有人知道什么是错的?

提前非常感谢你!

祝你好运

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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