Php запись данных в таблицу. Как сделать запись в базу данных MySQL, используя PHP код. Наиболее распространённые ошибки начинающих
Все модули сайта или веб приложения, где требуется внести и записать некоторые данные (например, имя, возраст, адрес и т.д.) используют простую функцию на языке mysql INSERT INTO `name_base` (name,value1,value2) VALUES (‘Vasya’,’1’,’2’);
Все переменные вносятся в базу данных согласно значениям, которые мы задали в первых скобках. Важно учитывать кодировку скрипта обработчика, базы данных и файла конфигурации. Желательно использовать самую распространенную кодировку UTF-8.
Следует учитывать, что записывать в базу можно двумя способами.
Первый способ если мы не задаем изначально имена ячейки таблиц базы данных. Тогда мы должны перечислить все переменные для каждой ячейки, а именно сколько ячеек в таблице базы данных, столько переменных должно быть перечислено в скобках после значения VALUE.
Например:
В таблице базы данных четыре ячейки. Значит после элемента VALUE (..) в скобках должны быть перечислены все четыре переменные. И еще один момент: если переменная не существует, допустим это необязательный параметр. То пишем просто пустое значение в кавычках ‘’,
"INSERT INTO `name_base` VALUES (NULL, `".$name."`,``,`2`)"; // третье пустое значение пишется в кавычках
Но у данного запроса есть небольшие недостатки. Если добавить одну ячейку или две ячейки в таблицу базы данных, то данный запрос вернет ошибку. Потому, что в этом методе перечисление всех ячеек в запросе обязательно.
Второй способ
если после запроса INSERT INTO `name_base` (…) перечислить все ячейки после имени базы данных. Пример уже рассмотрен чуть выше. Если забыли, напишем заново:
"INSERT INTO `name_base`(`name`,`value`,`value2`) VALUES (NULL, `".$name."`,``,`2`)";
Здесь мы перечислили все ячейки (name,value1,value2) . И если добавить дополнительно еще одну две ячейки в таблицу базы данных, то синтаксис запроса менять не придется. Но если только нам не нужно добавлять сразу в одном запросе те самые дополнительные переменные, которые нам нужны для тех самых новых созданных ячеек.
Такая ошибка вылетает очень часто, после небольшого изменения на сайте. Допустим, администратор добавил дополнительную ячейку в базу, допустим status. А изменить модуль обработчик скрипта не успел, или просто элементарно забыл. Но некоторые сайты имеют очень сложную структуру, и на поиск ошибки может уйти масса времени и сил. Поэтому желательно использовать второй метод записи в базу данных. Хотя такого рода ошибки чаще допускают начинающие веб программисты.
Php запись в базу данных mysql. Практические примеры
Итак, теперь добрались до самой сути при работе с запросами к базе данных. Все будем делать на практических примерах. Создадим простой скрипт для записи комментариев, которые будут оставлять посетители сайта.
Для начала создадим таблицу msg в базе данных с четырьмя ячейками. В первой ячейке пишем id комментария. Число символов в ячейке до десяти символов с параметром auto-increment. Это автоматический параметр будет меняться при каждом добавлении комментария на +1.
Следующая ячейка name имя пользователя. Число символов - до двести - триста символов на ваш выбор, параметр char. Затем ячейка coment - в эту ячейку будем заносить сам текст комментария. Если хотите записывать большие тексты комментариев, то можно задать параметр text - тогда можно заносит просто огромные тексты, более пятьсот тысяч символов или задайте параметр tinytext, тогда будет влезать чуть меньше символов, но работать будет чуть быстрее.
Но в нашем случае, будем иметь в виду, что посетители не будут писать огромные тексты. И поэтому ограничимся и будем фиксировать две тысячи символов с параметром varchar, для записи строковых значений.
В последнюю ячейку будем писать дату внесения записи текста комментария. Писать будем в числовом формате в секундах, при помощи функции текущей даты и времени time(); Для простоты, функцию зададим в переменную $time=time(); И создадим ячейку в базе данных. Назовем одноименно time с параметром int (для числовых значений). Пропишем число символов - лучше одиннадцать (с небольшим запасом на будущее:-).
Дамп базы данных следующий:
Структура таблицы `msg` -- CREATE TABLE IF NOT EXISTS `msg` (`id` int(10) NOT NULL AUTO_INCREMENT, `name` char(250) NOT NULL, `coment` varchar(2000) NOT NULL, `time` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Все, таблицу для комментариев создали. Теперь пишем форму для того чтобы написать комментарий и сам скрипт обработчик. HTML -код формы для внесения комментария следующий.
Последнее обновление: 1.11.2015
Для добавления данных используется выражение "INSERT":
$query ="INSERT INTO tovars VALUES(NULL, "Samsung Galaxy III","Samsumg")";
Выражение "INSERT" вставляет в таблицу одну строку. После ключевого слова INTO указывается название таблицы, а после VALUES в скобках указываются набор значений для всех столбцов. Так как у нас в таблице три столбца, то мы указываем три значения.
Так как в прошлой теме при создании таблицы мы указывали следующую очередность столбцов: id, name, company, то в данном случае для столбца id передается значение NULL, для name - "Samsung Galaxy III", а для company - "Samsumg".
Поскольку столбец id определен как AUTO_INCREMENT, то нам необязательно указывать для него определенное числовое значение, и можно передать значение NULL, а MySQL присвоит столбцу следующее доступное значение.
Теперь рассмотрим добавление данных на примере. Создадим файл create.php со следующим содержимым:
Данные добавлены"; } // закрываем подключение mysqli_close($link); } ?>
Добавить новую модель
Здесь код взаимодействия с базой данных объединен с функциональностью форм: c помощью формы мы вводим данные для добавления в бд.
Безопасность и MySQL
Здесь мы использовали функцию mysqli_real_escape_string() . Она служит для экранизации символов в строке, которая потом используется в запросе SQL. В качестве параметров она принимает объект подключения и строку, которую надо экранировать.
Таким образом, мы применяем экранизацию символов фактически два раза: сначала для sql-выражения с помощью функции mysqli_real_escape_string() , а затем для html с помощью функции htmlentities() . Это позволит нам защититься сразу от двух видов атак: XSS-атак и SQL-инъекций.
Урок будет основан на форме обратной связи , необходимой практически на любом сайте.======================================== ?>
Шаг первый: Создание базы данных в MySQL
Открываем phpMyAdmin (входит в базовый пакет Denwer `а), и создаем базу с названием "test_base ", кодировку выбираем "cp1251_general_ci ".
======================================== ?>
Шаг второй: Создание таблицы в MySQL с помощью SQL-запроса
Создать таблицу можно, конечно, и с помощью стандартных средств phpMyAdmin , но так наглядно будет видна структура создаваемой таблицы.
Создаем таблицу с названием "test_table " и с шестью полями с названиями:
"name " - здесь будут храниться имена пользователей;
"email " - здесь будут храниться адреса электронных ящиков пользователей;
"theme " - здесь будет храниться тема сообщения;
"message " - здесь будут храниться сообщения;
"data " - здесь будет храниться дата отправки сообщения;
"id " - идентификационный номер записи (строки), ключевое поле.SQL-запрос:
create table test_table(
id int(11) not null auto_increment,
name varchar(255) not null,
email varchar(255) not null,
theme varchar(255) not null,
message text not null,
data date not null,
primary key (id)
);======================================== ?>
Шаг третий: Создание формы
index.html:
Форма с сохранением в MySQL
Пример формы с сохранением данных в MySQL