Ошибка при загрузке изображения в phpmyadmin с использованием PDO в php

Я пытаюсь научиться вставлять изображение в phpmyadmin моего структуратора БД:

id int(11) AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
mime VARCHAR(255),
data BLOB

мой код:

        <?php
        ini_set('display_errors', '1');
        ini_set('display_startup_errors', '1');
        error_reporting(E_ALL);
        $dbh = new PDO("mysql:host=localhost;dbname=mydata", "root", "123456");

        if (isset($_POST['btn'])){
            $name = $_FILES['myfile']['name'];
            $type = $_FILES['myfile']['type'];
            $data = file_get_contents($_FILES['myfile']['tmp_name']);
            $stmt = $dbh->prepare("INSERT INTO myblob VALUES('',?,?,?)");
            $stmt->bindParam(1,$name);
            $stmt->bindParam(2,$type);
            $stmt->bindParam(3,$data);
            $stmt->execute();
        }
        ?>
        <form method = "post" enctype = "multipart/form-data">
            <input type = "file" name = "myfile" />
            <button name = "btn">Upload</button>
        </form>

моя ошибка при отправке:

Uncaught PDOException: SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column `mydata`.`myblob`.`id` at row 1

Есть идеи, что не так при попытке загрузить файл png?

1) PHPMyAdmin — это способ доступа к базе данных, а не сама база данных. Вы используете MySQL. 2) Вы не можете вставить пустую строку в целочисленный столбец. Либо используйте NULL для столбцов с автоматическим увеличением, либо укажите столбцы, которые вы вставляете, и вообще не вставляйте id.

aynber 09.05.2022 16:51

если я исправлю VALUES(?,?,?), теперь я получаю эту ошибку: ``` SQLSTATE [21S01]: список вставляемых значений не соответствует списку столбцов: 1136 количество столбцов не соответствует количеству значений в строке 1 ```

Alsakka 09.05.2022 16:58

Если вы отбросите поле идентификатора, вам нужно указать столбцы, которые вы вставляете.

aynber 09.05.2022 17:01
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы отправляете пустую строку со значением «id»:

$stmt = $dbh->prepare("INSERT INTO myblob VALUES('',?,?,?)");

Правильным было бы сообщить столбцам со значениями, которые нужно добавить, ничего не отправляя для столбца «id», поскольку это автоматическое увеличение

$stmt = $dbh->prepare(INSERT INTO myBlob(name, type, data) VALUES(:name, :type, :data)
$stmt->bindParam('name',$name);
$stmt->bindParam('type',$type);
$stmt->bindParam('data',$data);

Большое спасибо, что отлично мне помогли! как-то я следил за учебником, и он использовал именно тот синтаксис, который был у меня, и это не вызвало у него никаких ошибок.

Alsakka 09.05.2022 17:07

Другие вопросы по теме