alestro
@alestro

Почему не работает mysqli_stmt_send_long_data?

Есть таблица в которой есть поле blob пытаюсь вставить в него изображение 37 159 235 байт. Ограничение max_allowed_packet - 33554432 байт. Пытаюсь сделать следующим образом:

$stmt = $db->prepare('INSERT INTO `images`  ( `image` ) VALUES ( ? ) ');
$max = 33554432;
       

        $null = null;

        $stmt->bind_param('b', $null);

        $img = fopen('index.jpg', 'r');

      

        while (!feof($img)) {
            $stmt->send_long_data(0, fread($img, $max));
        }

        fclose($img);

        if($stmt->execute() === false){
            dd($stmt->error) 
        }

Но данный вариант выкидывает warrning: Error while sending STMT_SEND_LONG_DATA packet. PID=4540
А $stmt->error выводит MySQL server has gone away

Если читать данные из файла размером меньшим чем $max, например 8192, то $stmt->error выдает: Parameter of prepared statement which is set through mysql_send_long_data() is longer than 'max_allowed_packet' bytes

Можно ли каким-либо образом побороть данный порок не увеличивая max_allowed_packet сервера бд?
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
https://bugs.mysql.com/bug.php?id=83958
Not a bug, так и задумано.

Что делать? Вообще не пытаться пихать бинарники картинок в базу, что им там делать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽