Не работает добавление данных (INSERT INTO) в таблицу
Начал изучать PHP, с книги Head First PHP & MySQL, дошел до раздела в котором нужно добавить данные из заполненной формы в базу данных.
Выполнил все сначала, так сказать, своими словами, не работает. Дальше скачал готовые файлы с сайта книги, попытался найти где я ошибся, не нашел. Плюнул, заменил содержимое своих файлов содержимым из файлов книги, тоже не работает.
Высвечивается ошибка Error querying database. Запрос на создание таблицы сначала делал сам, потом удалил, на всякий случай, и сделал запрос из файла книги:
Предполагаю, что не всю информацию предоставил, спрашивайте, что нужно предоставлю. Прошу помочь, кто чем может? Если пошлете в Google, то хоть намекните состав запроса, область поиска.
1 ответ 1
В этом коде две принципиальные ошибки.
- Переменные подставляются в запрос напрямую, а не через плейсхолдеры.
- Отсутствует обработка ошибок mysql (Бессмысленная фраза «Error querying database» таковой считаться не может). А только прочитав сообщение об ошибке, можно понять, в чем проблема. Это принципиальный момент. Узнать причину ошибки можно только у своей системы. Посторонних людей спрашивать бесполезно.
Поскольку в mysqli работа с плейсхолдерами сложна до такой степени, что новички в принципе неспособны освоить её самостоятельно, то вместо mysqli надо надо сразу учить PDO.
Чтобы ошибки mysql отображались, надо перед соединением с БД написать строчку
а все чудовищные «or die()» из кода надо наоборот удалить подчистую и не писать больше никогда.
Если после этого запустить код, то ошибка будет выведена на экран или туда, куда обычно выводятся все ошибки. Её надо будет прочесть и исправить.
Но повторюсь, вместо mysqli надо в обязательном порядке использовать PDO. Это все равно придется делать в будущем, поэтому чем раньше, тем лучше. Вот хорошее руководство.
Источник
$ mysqli-> insert_id не работает
После вставки новой строки во внешнюю базу данных я хочу получить обратно новый (автоматически увеличивающийся) идентификатор, который был создан вместе с новой строкой.
Пока здесь все идет отлично. Строка внутри таблицы событий создается без проблем. Теперь я хочу получить созданный идентификатор:
Здесь код перестает работать. Я пробовал несколько вариантов оператора insert_id, но ни один из них не работал. Какой здесь правильный путь? После присвоения $ last_id последнего идентификатора мне нужен второй запрос:
Я благодарен за любую помощь!
4 ответа
Стиль ООП insert_id — это свойство, а не функция:
Похоже, вы на самом деле не используете объектно-ориентированный стиль mysqli . Если вы хотите быть последовательным и везде использовать процедурный стиль, вам следует использовать:
Вот пример создания таблицы и отображения идентификатора записи. Практика всегда полезна, если не знаешь, в чем ошибка
Причина, по которой insert_id() не работает, заключается в том, что insert_id не функция, а свойство. Итак, вы хотите использовать insert_id , а не insert_id()
Как указывает Полпро, это можно сделать двумя способами: Ответ Paulpro
Insert_id в стиле ООП — это свойство, а не функция:
$last_id = $mysqli->insert_id; // или, поскольку ваш объект mysqli, кажется, находится в $GLOBALS[«___mysqli_ston»]
Похоже, вы на самом деле не используете объектно-ориентированный стиль mysqli. Если вы хотите быть последовательным и везде использовать процедурный стиль, вам следует использовать:
$last_id = mysqli_insert_id( $GLOBALS[«___mysqli_ston»] );
Достичь этого можно двумя способами:
Или как ответил Полпро:
Можете ли вы попробовать в объектно-ориентированном стиле как
Источник
$ mysqli-> insert_id не работает
После вставки новой строки в мою внешнюю базу данных я хочу получить обратно новый (автоматически увеличившийся) ID, который был создан вместе с новой строкой.
Все работает отлично, пока здесь. Строка создается внутри таблицы событий без дополнительных проблем. Теперь я хочу получить созданный ID:
Здесь код перестает работать. Я пробовал некоторые варианты выражения insert_id, но ни один из них не работал. Что здесь правильно? После присвоения $ last_id последним идентификатором, мне нужен второй запрос:
Я благодарен за любую помощь!
Стиль insert_id является свойством, а не функцией:
Похоже, вы на самом деле не используете объектно-ориентированный стиль mysqli . Если вы хотите быть последовательным и использовать процедурный стиль повсюду, вы должны использовать:
Здесь приведен пример создания таблицы и отображения идентификатора записи. Практика всегда хороша, когда вы не знаете, что такое ошибка
Причина, по которой insert_id() не работает, заключается в том, что insert_id не является функцией, которая является свойством. Поэтому вы хотите использовать insert_id not insert_id()
Как указывает Paulpro, есть два способа сделать это: ответ Paulpro
Стиль OOP insert_id является свойством, а не функцией:
$last_id = $mysqli->insert_id; // или, поскольку ваш объект mysqli, кажется, находится в $GLOBALS[«___mysqli_ston»]
Похоже, вы на самом деле не используете объектно-ориентированный стиль mysqli. Если вы хотите быть последовательным и использовать процедурный стиль повсюду, вы должны использовать:
$last_id = mysqli_insert_id( $GLOBALS[«___mysqli_ston»] );
Источник
MySQL INSERT IGNORE primary key не работает
Нужно запретить вставляться в таблицу повторений. Вот моя таблица follow:
f_id sender_id receiver_id
1 19 18
2 17 16
3 2 8
f_id — это PRIMARY KEY и autoincrement
Дупликаты всё равно вставляются, например 19, 18:
f_id sender_id receiver_id
1 19 18
2 17 16
3 19 18
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Primary key и другие баги mySQL с join на фоне ORDER BY
Да, чтобы воспроизвести нужен запрос с left join в конце которого стоит order by и тогда можно.
Зачем нужны primary key и foreign key?
Пожалуйста, объясните самым простым языком зачем эти ключи нужны? Какова их функция? Как они.
PRIMARY KEY and UNIQUE KEY
Добрый день. mysql не создаёт таблицы в БД, код написан под старую версию mysql выбивает.
У меня не изменяются на unique, у меня там в sender_id два раза встречается число 17 и он пишет ошибку, мне нужно чтобы именно пары как они есть не повторялись то есть вот так можно:
sender_id receiver_id
17 —- 19
17 —- 18
19 —- 18
sender_id receiver_id
17 —- 19
17 —- 19
Наверно ошибка типа такой
Error Code: 1062
Duplicate entry XXXX for key XXXX
Потому что там уже присутствуют дублирующие пары.
Нужно как-то избавиться от них, если их там быть не должно.
Как вариант создать другую таблицу с такой-же структурой, и этими ключами
Заполнить INSERT IGNORE INTO t SELECT * FROM follow
и посмотреть что туда не попадает
Решение
id | id_x | id_y |
---|---|---|
1 | 1 | 1 |
4 | 2 | 5 |
2 | 22 | 33 |
5 | 22 | 44 |
3 | 33 | 22 |
6 | 55 | 22 |
Insert IGNORE
Всем привет, запрос выполняется с ошибкой, подскажите что не так? FB 2.5 пишу на Delphi 7 .
Запрос INSERT IGNORE INTO
Пытаюсь сделать так, что бы запрос INSERT не добавлял строки с одинаковыми данными. Наткнулся на.
INSERT IGNORE по определенному полю
Всем привет, есть три поля: автоинкремент, телефон и имя. Добавляю INSERT IGNORE INTO . но так.
PRIMARY KEY
Чем отличаются следующие команды? CREATE TABLE T (P INTEGER NOT NULL, L INTEGER NOT NULL, A.
Primary key
подскажите, имеется таблица, забитая данными, все колонки null. как объявить primary key, просто.
PRIMARY KEY
приветствую. У меня есть таблица с 6 полями, 1 из которых primary key. одна из обязательных функций.
Источник
Не работает PHP (PDO/ INSERT/ SELECT)
Я начал изучать и PHP, и ASP.NET, пока что у меня в голове каша..
ОС: Ubuntu 18.04
Сервер: Server version: Apache/2.4.29 (Ubuntu)/
PHP: PHP 7.2.15-0ubuntu0.18.04.1
MySQL: mysql Ver 14.14 Distrib 5.7.25 phpmyadmin: 4.8.5
А внутри add.php расположен след. код:
А внутри controller.php расположен следующий код:
Вроде всё кажется правильным, но почему-то в базу не добавляет введенные данныею
И еще как сделать так, чтоб при нажатии, на кнопку AddDB и отправил запрос,и потом возвращался на главную страницу?
1 ответ 1
Это очень хорошй и важный вопрос.
Но ответ на него не совсем очевидный. И звучит он так: «Надо правильно соединяться с PDO».
Вообще, тема «что делать, если код не работает» довольно обширная, но самое первое, что надо делать в таком случае — это попросить РНР сообрщать обо всех ошибках, которые произошли в скрипте. А в данном случае — попросить ПДО сообщать об ошибке, произошедшей при выполнении запроса. И вот как раз для этого и надо правильно соединяться: Как правильно соединяться с Mysql в PDO. помимо других важных настроек мы таже сконфигурируем правильный режим выброса ошибок для PDO.
После этого PDO начнет нам говорить, в чем у нас проблема! Надо только убедиться, что PHP в принципе настроен так, чтобы сообщать об ошибках.
Скорее всего PDO сообщит о том, что не найдена база данных или хост. Поскольку никаких украшений (включая пробелы) в DSN быть не должно. Но конкретная ошибка в данном случае не важна, поскольку ошибки всегда разные, и на все случаи все равно ответить невозможно. Но это и не нужно — надо просто прочитать сообщение об ошибке, и исправить её.
Источник