Dosya sisteminde saklanan CalDAV yönergelerini içeren bir dosyayı SabreDAV ile kullanmak üzere veritabanına kaydetmek istiyorum. (Ben zaten kontrol gerektiği gibi verileri içeren) ve veritabanına saklamalısınız şu kod parçacığı dosyasını okurBLOB Veritabanı her zaman EMPTY
$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();
Aşağıdaki kod parçası çalışıyor dosya oluşturur
Sorgu, sistem tarafından herhangi bir hata olmadan yürütülür, ancak veritabanına depolanması gereken BLOB boş kalır. Neyin yanlış olduğu hakkında bir fikri olan var mı?
Şimdiden çok teşekkür ederim!
Saygılarımızla
Dosyanın tamamını okuyacaksanız, neden dosya_get_contents' değil? İkili güvenli değil mi? Ayrıca, dosya fclose 'unutmayın ... –
Yanıtlarınız için çok teşekkür ederim! @Mihail Burduja: Yararlı cevabınız için çok teşekkür ederim. Dosya doğru okunur. Kesinlikle çalışan bir çözüm yol açar, ancak dosyanın veritabanına iletilmesinde başka bir sorun var gibi görünüyor. Blob veritabanında boş kalır. Bu arada (1) MYSQL LOAD_FILE (zaten kontrol izinlerini) ile denedim, bu da takvim verisinin değerini NULL (NULL) "(" uyandırdığı "kötü şöhretli linux hatayı") ve (2) file_get_contents veritabanındaki nesnenin boş kalmasını sağlar. . Çok teşekkür ederim – DrFeelgood
@DrFeelgood Bloğu dize olarak bağlamayı deneyin. Değeri null olarak ayarlayan 'b' türünde bilinen bir sorun var. Öyleyse $ stmt-> bind_param ("s", $ content); $ stmt-> bind_param ("b", $ content) yerine; Kaynak: http://php.net/manual/ro/mysqli-stmt.bind-param.php#96850 –