我想将包含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保持为空。有没有人知道什么是错的?
提前非常感谢你!
祝你好运
答案 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
未向您提供文件内容。它会打开一个文件,并为您提供处理该文件的句柄。您需要使用该句柄实际读取文件中的一些数据。