У меня возникла проблема при попытке обновить два BLOB-поля в строке с помощью команд mysql и php.mysql update 2 blobs сразу не работает
Вставка BLOB в строку, похоже, не сработает, вот что я делаю.
$logotemp = $_FILES['eventlogo']['tmp_name'];
$thumbnailtemp = $_FILES['eventthumbnail']['tmp_name'];
$openlogo = fopen($logotemp, 'r');
$openthumbnail = fopen($thumbnailtemp, 'r');
$logo = fread($openlogo, filesize($logotemp));
$logo = addslashes($logo);
$thumbnail = fread($openthumbnail, filesize($thumbnailtemp));
$thumbnail = addslashes($thumbnail);
fclose($openlogo);
fclose($openthumbnail);
Поэтому у меня есть два входа файла форма, и эти файлы читаются, а затем установить в качестве переменных $ журнала и $ миниатюр. Затем я использую следующую команду, чтобы ввести это в БД:
$qry = "INSERT INTO $table (`Event Logo`, `Venue Logo`) VALUES ('$logo', '$thumbnail')";
$result = mysql_query($qry);
if(!$result) {
die(mysql_error());
}
Вышеприведенных отлично работает, хотя я отделан остальная часть полей, которые также наполняемая. Запрос работает, и я могу вернуть изображения на страницу, а затем отобразить их вместе со всей другой информацией из этой строки.
Затем я хочу отредактировать строку, поэтому создал новый php-файл с именем edit.php, который является копией файла php, используемого выше, называемого new.php.
Это означает, что форма идентична, и когда страница отображается, значение для каждого входа заполняется информацией из базы данных, логотип и миниатюра отображаются рядом с полями загрузки.
Если я запустил запрос для обновления строки, используя почти тот же код, что и выше, он всегда вводит пустое значение в оба блока, по существу удаляя загруженные изображения. Вот что происходит:
$id = $_POST['eventid'];
$logotemp = $_FILES['eventlogo']['tmp_name'];
$openlogo = fopen($logotemp, 'r');
$logo = fread($openlogo, filesize($logotemp));
$thumbnailtemp = $_FILES['eventthumbnail']['tmp_name'];
$openthumbnail = fopen($thumbnailtemp, 'r');
$thumbnail = fread($openthumbnail, filesize($thumbnailtemp));
fclose($openlogo);
fclose($openthumbnail);
Итак, еще раз, форма поля до сих пор называют eventlogo и eventthumbnail, а переменные еще $ логотип и $ миниатюру. Затем я использую следующий запрос для обновления строки:
$qry = "UPDATE $table SET `Event Name` = '$name', `Date` = '$date', `Time` = '$time', `Venue` = '$venue', `Price` = '$price', `Open To` = '$opento', `Rep Name` = '$repname', `Rep Email` = '$repemail', `Address` = '$address', `Website` = '$website', `Phone` = '$phone', `Description` = '$description', `Event Logo` = '$logo', `Venue Logo` = '$thumbnail' WHERE `Event ID` = '$id'";
Я оставил в других переменных, которые обновляются на этот раз.
$result = mysql_query($qry);
if(!$result) {
die(mysql_error());
}
Когда запрос выполняется, он обновит любые другие поля, которые я хочу, за исключением двух полей BLOB изображения в конце. Учитывая, что я скопировал и вставил код для полей для загрузки, код для чтения содержимого этого поля, а затем вручную напечатал запрос для обновления этих полей, я не вижу, что происходит не так.
Я пропустил что-то очевидное? Любая помощь приветствуется.
Спасибо, Eds
1-й. Используйте параметризованный SQL, как есть, это вызывает проблемы. Во-вторых, в редакторе edit.php вы, по крайней мере, пропускаете вызов «addlashes» над логотипом. Двоичные данные будут содержать символы, которые испортили ваш SQL-запрос, но mysql (и другие серверы sql) будут молча принимать их. –
Извините, мой код не включает addlashes, но не включил их здесь по какой-то причине. Должно быть, что-то не так в открытии файла и читая его как двоичное, и просто подходим пустым – Eds