$serv = "xxx"; $user = "xxx"; $pass = "xxx"; $db = "xxx"; $imgloc = "../images/bg.jpg"; $image = fopen($imgloc, 'rb'); $imageContent = fread($image, filesize($imgloc)); $conn = new mysqli($serv, $user, $pass, $db); $sql = "INSERT INTO `image`(`advert_id`,`img`) VALUES('1','" . $imageContent . "');"; $conn->query($sql);
Я использую вышеуказанный код, чтобы попытаться вставить двоичный код в мою базу данных MySQL, но ничего не отправляется в базу данных. $ ImageContent просто появляется в базе данных как нуль, но если я эхо $ imageContent, он, кажется, отображает двоичные данные.
advert_id – это просто поле int, а img – BLOB
Причина, по которой ваш код не работает, заключается в том, что вам нужно избегать ваших данных.
$imageContent = fread($image, filesize($imgloc)); $imageContent = mysqli_real_escape_string($conn, $imageContent);
Вы не видите синтаксическую ошибку, похожую на:
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «8 16 @ # 54» в строке 1 …
Посетите http://php.net/manual/en/mysqli.error.php и http://php.net/manual/en/function.error-reporting.php , а затем используйте следующее в верхней части файла:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // rest of your code
Это приведет к синтаксическим ошибкам.
Использовать mysqli
с подготовленными операторами или PDO с подготовленными операторами
Плюс, как сказал Майк Брант в комментариях, и я цитирую:
«В качестве тангенциального комментария я бы рекомендовал, чтобы у вас ДЕЙСТВИТЕЛЬНО был хороший прецедент для хранения изображений в MySQL. Во многих случаях это может быть не очень хорошая идея по сравнению с просто хранением ссылок на файлы в базе данных. "
Прочтите следующие вопросы и ответы на стек: