我想将包含存储在文件系统中的CalDAV指令的文件存储到数据库中,以便与SabreDAV一起使用。下面的代码段创建工作正常的文件:数据库中的BLOB始终为空
$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保持空白。有人有什么错误的想法吗?
非常感谢您提前!
问候
如果你要读整个文件,为什么不''file_get_contents'?它不是二进制安全的吗?此外,不要忘了'fclose'文件... –
非常感谢您的答案! @Mihail Burduja:非常感谢您提供的有用答案。该文件将被正确读取。它肯定会导致一个工作的解决方案,但它似乎有文件传输到数据库的另一个问题。 blob在数据库中保持空白。与此同时,我用(1)MYSQL LOAD_FILE(我已经检查了权限)来试用它,这使得calendardata的值变为NULL(perhabs“臭名昭着的linux bug”,我偶然发现了uppon?)和(2)file_get_contents,其中数据库中的Object保持为空。 非常感谢你 – DrFeelgood
@DrFeelgood尝试将字符串绑定到blob。 'b'类型存在已知问题,将该值设置为null。所以试试$ stmt-> bind_param(“s”,$ contents);而不是$ stmt-> bind_param(“b”,$ contents);.来源:http://php.net/manual/ro/mysqli-stmt.bind-param.php#96850 –