Для начинающих пользователей ПК

Php запись в базу данных mysql. Практические примеры. Запрос SQL на добавление и удаление записей Добавить данные в таблицу sql php

В этом посте хочу рассказать, как передать в Базу Данных, введенные данные в форму . И так мы создаем простую форму, где у нас будет два поля: имя пользователя и его электронная почта:

Ваше имя:
Ваш E-mail:


Эта форма может применятся для регистрации нового пользователя, для рассылки новостей, для сбора статистики, да для чего угодно... В общем в эту форму пользователь забивает свои данные: имя и почту, нажимает на кнопку и дальше данные переходят в php скрипт:

$name = $_POST["name"]; $email = $_POST["email"]; $result = mysqli_query("INSERT INTO user (name, email) VALUES ("$name", "$email")"); if ($result) { echo "Данные успешно сохранены!"; } else { echo "Произошла ошибка, пожалуйста повторите попытку."; }


Что же в этом скрипте происходит? Сейчас разберемся!
Введенные в форму данные, методом POST переходят в php скрипт (который написан выше), и при помощи глобального массива $_POST данные формируются в переменные $name и $email:

$name = $_POST["name"]; $email = $_POST["email"];


После того, как переменные готовы для занесения в базу, составляем запрос. Но прежде Ваши скрипты должны быть уже подключены к БД, как подключиться к БД, я писал в этой теме: . Сам запрос выглядит так:

$result = mysqli_query("INSERT INTO user (name, email) VALUES ("$name", "$email")");


В этом коде мы обозначили, что в ячейки name и email , которые находятся в таблице user , будут добавлены следующие переменные: $name и $email .
Далее, если все прошло успешно, мы получим сообщение из условия:

Данные успешно сохранены!


Если же возникли какие то проблемы и данные не были занесены, мы получим сообщение об ошибке:

Произошла ошибка, пожалуйста повторите попытку.


Вот и все!

*** *** *** *** ***

При желании можно добавить больше полей для ввода информации, например нам необходимо добавить поле для ввода города пользователя. У нас уже есть готовый скрипт (написан выше), теперь просто добавим поле Ваш город , переменную назовем: $city . И так в форму ввода данных, после:

Ваш E-mail:


добавляем:

Ваш город:


В php скрипте, после:

$email = $_POST["email"];


добавляем:

$city = $_POST["city"];


Ну и конечно в запросе добавляем тоже, вот так:

$result = mysqli_query("INSERT INTO user (name, email, city) VALUES ("$name", "$email", "$city")");


Вот, что должно получится в итоге:
Форма ввода:

Ваше имя:
Ваш E-mail:
Ваш город:


Скрипт:

$name = $_POST["name"]; $email = $_POST["email"]; $city = $_POST["city"]; $result = mysqli_query("INSERT INTO user (name, email, city) VALUES ("$name", "$email", "$city")"); if ($result == true) { echo "Данные успешно сохранены!"; } else { echo "Произошла ошибка, пожалуйста повторите попытку."; }


Как видите ни чего сложного! При необходимости можно добавить ещё поле, и ещё, и ещё...

Комментарии, перенесенные из блога

СЕРГЕЙ
14.09.2016 в 01:25
День добрый!
Интересует такой вопрос: каким образом проще всего организовать хранение данных и настроек программы без использования бд? Не хочется привязываться к MySQL или Access ..

ADMIN
14.09.2016 в 22:14
Здравствуйте!

Properties.Settings
App.Config
XML файл
сериализация
Попробуйте выбрать что-нибудь из этого из списка.

НИКОЛАЙ
16.09.2016 в 02:28
Здравствуйте, как удалить выделенную строку в dataGridVIew из dataGridVIew и phpMyAdmin.

PhpMyAdmin? Это лишь оболочка для работы с базой данных, можете пояснить?

НИКОЛАЙ
18.09.2016 в 02:24
нужно что бы выделенная строка удалялась из DataGridView и из базы данных.

ADMIN
19.09.2016 в 07:00
Как удалить строку в базе данных Mysql — добавил статью.

НИКОЛАЙ
20.09.2016 в 09:20
Спасибо огромное.

ДИМА
20.09.2016 в 10:24
Здравствуйте, а можно данный способ реализовать не через DataGridView, а через ComboBox? Если да, то как? Спасибо.

ADMIN
22.09.2016 в 03:21
Привет. Пример:

ГЕННАДИЙ
22.09.2016 в 18:25
почему мне в базу данных вноситься такой текст System.Windows.Forms.TextBox, Text: ге

К стате вот это (ге) к конце это написано гена хоть в настройках таблицы указан текст.слово гена должно было уместиться дальше я вывожу эту таблицу в свою программку и получается что он выводит мне весь этот ненужный текст

ADMIN
24.09.2016 в 04:17
Скорее всего неверно написан SQL запрос, например:

В textBox1 вводим имя: Гена.

Sql запрос: «Insert into имя таблицы values(textBox1, ..)»; Результат: System.Windows.Forms.TextBox

А нужно передавать: «Insert into имя таблицы values(textBox1.Text, ..)»;
Результат: Гена

ГЕННАДИЙ
24.09.2016 в 18:41
Да так оно и есть. СПасибо

СЕРГЕЙ
25.09.2016 в 11:51
Здравствуйте. А как реализовать добавление в БД через textBox?

ADMIN
26.09.2016 в 20:53
Всё тоже самое в принципе. Например, возьмём самый последний пример, в нём нужно:

//создаем параметры и добавляем их в коллекцию cmd.Parameters.AddWithValue("@Name", textBox1.Text); cmd.Parameters.AddWithValue("@LastName", textBox2.Text);

теперь параметры: Name и LastName получают значения введенные в textbox-ы и передают их в БД

ЛИНАРА
27.09.2016 в 17:45
Здравствуйте, как выделенную строку в dataGridVIew и phpMyAdmin?

ADMIN
29.09.2016 в 02:06
Я не знаю, как можно выделенную строку в phpMyAdmin. А в dataGridView, например это можно сделать с помощью события SelectionChanged.

PSH
30.09.2016 в 03:48
2Линара:
Если так хотите редактировать строки, возьмите инструмент а-ля HediSQL, настройте и изменяйте строки.

2admin
Доброго дня! Спасибо за материлы — всё очень круто изложено)
Вопрос: добавляю данные вот таким запросом (он тестовый):

String sql = "INSERT INTO users (`FIO`, `Tour`, `Count`, `Cost`, `Date`, `Passport`, `Birth`) VALUES ("Колян", "Москва", "1+1", 1100, "2011-11-11", "1111 1111", "9.11.1900");";

Данные вносятся всё ок, но вот в БД (mysql) вместо кириллицы оказываются «????».

Visual studio говорит, что System.String — последовательность Юникода.

Также пробовал:

ALTER DATABASE `test` COLLATE "koi8r_general_ci"; ALTER TABLE `users` COLLATE="koi8r_general_ci"; ALTER DATABASE `test` COLLATE "utf8_unicode_ci"; ALTER TABLE `users` COLLATE="utf8_unicode_ci";

Но не помогает..
В чем может быть дело? Разные кодирвки VS и БД? Или что?
Могли бы направить что почитать/поменять.
Спасибо

ADMIN
01.10.2016 в 09:49
Привет.

В БД (и в таблице) сопоставление utf_general_ci

Такое сопоставление разве есть? Возможно, utf8_general_ci?

Обычно создают БД Mysql выбирая сравнение utf8_general_ci, поэтому проблем с кириллицей не возникает, если конечно с клиента не приходят кракозябры на сервер.

COLLATION используется для сравнения, а в данном же случаи важна кодировка (charset). Поэтому для начала необходимо убедиться, что она выставлена на сервере верно, например в utf8, а не latin1.

При подключении через.net коннектор (по умолчанию) используется latin1, поэтому иногда требуется явно указать в строке подключения кодировку utf8:

MySqlConnection mycon; mycon = new MySqlConnection("server=127.0.0.1;uid=vasya;pwd=123;database=test;Charset=utf8;"); //MySqlConnectionStringBuilder: mysqlCSB.CharacterSet = "utf8";

PSH
01.10.2016 в 11:34
Вы правы, описался, utf8_general_ci!
Да помогло, ;Charset=utf8;
Спасибо огрмное!

СЕРГИЙ
02.10.2016 в 11:02
Спасибо за рабочий пример, нужный. Вопрос
Я создал текстовое поле в которое хотел бы вводить айпи-адрес базы данных, но не знаю как подставить эти данные вот сюда

String conStr = "[email protected];user=test;" +
"database=test;password=test;";
Подскажите пожалуйста как вставлять данные из текстовых полей в windows form в эту конструкцию….

ADMIN
03.10.2016 в 11:50
"[email protected];user=...
Вообще лучше вместо такой строки использовать свойства, как в данной статье, либо метод String.Format()

OLGA2203
15.05.2017 в 20:14

String Connect = “Server=127.0.0.1;Port=3306;Database=base;Data Source=localhost;user=root;”; MySqlConnection con = new MySqlConnection(Connect); con.Open(); //Устанавливаем соединение с базой данных. MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = @”INSERT INTO tovar(ID,Category,Name,TradeMark,Price,Photo,Size,Color,Material,Count) VALUES (@pr, @Category, @Name, @TradeMark, @Price, @Photo, @Size, @Color, @Material, @Count)”; cmd.Parameters.AddWithValue(“@pr”,counter); cmd.Parameters.AddWithValue(“@Category”, comboBox1.SelectedItem.ToString()); cmd.Parameters.AddWithValue(“@Name”, textBox1.Text); cmd.Parameters.AddWithValue(“@TradeMark”, textBox2.Text); cmd.Parameters.AddWithValue(“@Price”, Convert.ToInt32(textBox4.Text)); cmd.Parameters.AddWithValue(“@Photo”, textBox3.Text); cmd.Parameters.AddWithValue(“@Size”, textBox6.Text); cmd.Parameters.AddWithValue(“@Color”, textBox5.Text); cmd.Parameters.AddWithValue(“@Material”, textBox8.Text); cmd.Parameters.AddWithValue(“@Count”, Convert.ToInt32(textBox7.Text)); cmd.Connection = con; cmd.ExecuteNonQuery(); MessageBox.Show(“Добавление прошло успешно”, “Добавление прошло успешно”, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

Выдается ошибка “Column ‘ID’ cannot be null”, убираю добавление в столбец ID – то же самое про следующий столбец пишет и т.д.
Если вношу какие-нибудь константные значения в скобках в VALUES, строка в базу добавляется.
Подскажите, пожалуйста, в чем проблема? Мне нужно записывать в базу данных именно вводимые через форму данные и значения

В этой статье мы рассмотрим, как использовать PHP для вставки строк в базу данных MySQL.

Шаг 1 — Создание таблицы

Сначала нужно создать таблицу для данных. Это простая процедура, которую можно выполнить с помощью phpMyAdmin в панели управления хостингом.

После входа вы phpMyAdmin вы увидите такой интерфейс:

Создадим в базе данных u266072517_name таблицу с именем Students, нажав на кнопку «Создать таблицу». После этого мы увидите новую страницу, на которой задаем все необходимые параметры таблицы:

Это самая простая настройка, которую можно использовать для таблицы и получения дополнительной информации о структуре таблиц / баз данных.

Параметры столбцов:

  • Name — это имя столбца, которое отображается в верхней части таблицы.
  • Type — тип столбца. Например, мы выбрали varchar, потому что будем вводить строковые значения.
  • Length/Values — используется для указания максимальной длины, которую может иметь запись в этом столбце.
  • Index — мы использовали «Первичный» индекс для поля «ID». При создании таблицы рекомендуется применять в качестве первичного ключа только один столбец. Он используется для перечисления записей в таблице и требуется при настройке таблицы. Я также отметил «A_I», что означает «Auto Increment» — параметр автоматического присваивания номера записей (1,2,3,4 …).
    Нажмите кнопку «Сохранить», и таблица будет создана.

Шаг 2. Написание PHP-кода для вставки данных в MySQL.

Вариант 1 — метод MySQLi

Сначала необходимо установить соединение с базой данных. После этого используем SQL-запрос INSERT. Полный пример кода:

" . mysqli_error($conn); } mysqli_close($conn); ?>

Первая часть кода (3 — 18 строка) предназначена для подключения к базе данных.

Начнем со строки № 19:

$sql = "INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", "[email protected]")";

Она вставляет данные в базу MySQL. INSERT INTO — это оператор, который добавляет данные в указанную таблицу. В нашем примере данные добавляются в таблицу Students.

Далее идет перечисление столбцов, в которые вставляются значения: name, lastname, email. Данные будут добавлены в указанном порядке. Если бы мы написали (email, lastname, name), значения бы были добавлены в другом порядке.

Следующая часть — это оператор VALUES. Здесь мы указываем значения для столбцов: name = Thom, lastname = Vial, email = [email protected]

Мы запустили запрос с использованием PHP-кода. В программном коде SQL-запросы должны быть экранированы кавычками. Следующая часть кода (20-22 строка) проверяет, был ли наш запрос успешным:

if (mysqli_query($conn, $sql)) { echo "New recordcreatedsuccessfully"; }

Этот код выводит сообщение об успешном выполнении запроса.

И последняя часть (22 — 24 строка) отображает уведомление, если запрос не был успешным:

else { echo "Error: " . $sql . "
" . mysqli_error($conn); }

Вариант 2 — метод объекта данных PHP (PDO)

Сначала нам нужно подключиться к базе данных путем создания нового объекта PDO. При работе с ним будем использовать различные методы PDO. Методы объектов вызываются следующим образом:

$the_Object->the_Method();

PDO позволяет «подготовить» SQL-код до его выполнения. SQL-запрос оценивается и «исправляется» перед запуском. Например, простейшая атака с использованием SQL-инъекции может быть выполнена через простое введение SQL-кода в поле формы. Например:

Так как это синтаксически правильный SQL- код, точка с запятой делает DROP DATABASE user_table новым SQL-запросом, и пользовательская таблица удаляется. Подготовленные выражения (связанные переменные) не позволяют, чтобы точка с запятой и кавычки завершали исходный запрос.Поэтому команда DROP DATABASE никогда не будет выполнена.

Чтобы использовать подготовленные выражения, нужно написать новую переменную, которая вызывает метод prepare() объекта базы данных.

Корректный код:

getMessage(); } // Устанавливаем переменные для персоны, которую мы хотим добавить в базу данных $first_Name = "Thom"; $last_Name = "Vial"; $email = "[email protected]"; // Создаем переменную, которая вызывает методобъекта базы данных prepare() // Запрос SQL, который вы хотите выполнить, вводится как параметр, а заполнители пишутся следующим образом:placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Теперь мы указываем скрипту, какая переменная ссылается на каждый заполнитель, чтобы использовать метод bindParam() // Первый параметр - это заполнитель в операторе выше, второй - это переменная, на которую он должен ссылаться $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement->bindParam(:email, $email); // Выполняем запрос, используя данные, которые только что определили // Метод execute() возвращает TRUE, если он выполнен успешно, и FALSE, если нет, предоставляя вам возможность вывести собственное сообщение if ($my_Insert_Statement->execute()) { echo "New recordcreatedsuccessfully"; } else { echo "Unable to createrecord"; } // В этой точке можно изменить данные переменных и выполнить запрос, чтобы добавить другие данные в базу data to the database $first_Name = "John"; $last_Name = "Smith"; $email = "[email protected]"; $my_Insert_Statement->execute(); // Выполняем снова, когда переменная изменена if ($my_Insert_Statement->execute()) { echo "New recordcreatedsuccessfully"; } else { echo "Unable to createrecord";

В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Также существует метод bindValue(), который сильно отличается от предыдущего.

  • bindParam() — этот метод оценивает данные при достижении метода execute(). В первый раз, когда скрипт достигает метода execute(), он видит, что $first_Name соответствует «Thom». Затем связывает это значение и запускает запрос. Когда скрипт достигает второго метода execute(), он видит, что $first_Name теперь соответствует «John». После чего связывает это значение и снова запускает запрос с новыми значениями. Важно помнить, что мы однажды определили запрос и повторно используем его с разными данными в разных точках скрипта.
  • bindValue() — этот метод оценивает данные, как только достигается bindValue(). Поскольку для $first_Name было установлено значение «Thom», при достижении bindValue(), оно будет использоваться каждый раз, когда вызывается метод execute() для $my_Insert_Statement.
    Обратите внимание, что мы повторно используем переменную $first_Name и присваиваем ей новое значение во второй раз. После запуска скрипта в БД будут указаны оба имени, несмотря на то, что переменная $first_Name в конце скрипта имеет значение «John». Помните, что PHP проверяет весь скрипт, прежде чем запустить его.

Если вы обновите скрипт, чтобы заменить bindParam на bindValue, вы дважды вставите в базу данных «Thom Vial», а John Smith будет проигнорирован.

Шаг 3 — подтверждение успешного выполнения и решение проблем

Если запрос на вставку строк в базу был успешным, мы увидим следующее сообщение:

Устранение распространенных ошибок

MySQLi

В любом другом случае будет отображено сообщение об ошибке. Например, давайте сделаем в коде одну синтаксическую ошибку, и мы получим следующее:

Первая часть кода в порядке, соединение было успешно установлено, но SQL-запрос не прошел.

"Error: INSERT INTO Students {name, lastname, email} VALUES ("Thom", "Vial", "[email protected]") You have an error in your SQL syntax; check the manualthatcorresponds to your MySQL server version for the rightsyntax to use near "{name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")" at line 1"

Была допущена синтаксическая ошибка, которая вызвала сбой скрипта. Ошибка была здесь:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")";

Мы использовали фигурные скобки вместо обычных. Это неверно, и скрипт выдал синтаксическую ошибку.

PDO

В строке 7 соединения PDO для режима ошибок установлено «display all exceptions». Если задано другое значение, и запрос не удался бы, мы не получили бы никаких сообщений об ошибках.

Данную настройку следует использовать только при разработке скрипта. При ее активации могут отображаться имена базы данных и таблиц, которые лучше скрыть в целях безопасности. В описанномвыше случае, когда вместо обычных скобок использовались фигурные, сообщение об ошибке выглядит так:

Fatal error: Uncaughtexception "PDOException" with message "SQLSTATE: Syntax error or accessviolation: 1064 You have an error in your SQL syntax; check the manualthatcorresponds to your MySQL server version for the rightsyntax to use near "{name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")" at line 1"

Другие возможные проблемы:

  • Неверно указаны столбцы (несуществующие столбцы или орфографическая ошибка в их именах).
  • Один тип значения присваивается столбцу другого типа. Например, если попытаться вставить число 47 в столбец Name, то получим ошибку. В этом столбце необходимо использовать строковое значение. Но если бы мы указали число в кавычках (например, «47») то сработало бы, потому что это строка.
  • Попытка ввести данные в таблицу, которая не существует. А также допущенная орфографическая ошибка в имени таблицы.

После успешного ввода данных мы увидим, что они добавлены в базу данных. Ниже приведен пример таблицы, в которую добавили данные.

И приведены
. А сейчас мы поговорим, как добавлять изображения в базу MySQL через форму, используя PHP .

Создание поля в MySQL базе для добавления изображения

Для начала хочу сказать, что для хранения изображений в базе данных MySQL необходимо определить одно из полей таблицы как производное от типа BLOB.

Сокращение BLOB означает большой двоичный объект. Тип хранения данных BLOB обладает несколькими вариантами:

  • TINYBLOB — Может хранить до 255 байт
  • BLOB может хранить до 64 килобайт информации
  • MEDIUMBLOB — до 16 мегабайт
  • LONGBLOB до 4 гигабайт

Для хранения файла изображения в базе данных необходимо прочитать файл в переменную и создать запрос на добавление данных в таблицу.

Подготовка формы на странице для добавления изображения в базу данных MySQL

В моём случае задача была добавлять два изображения в базу через форму, используя PHP . У нас есть форма с двумя полями и кнопкой отправить:

form name=»form1″ method=»post» action=»add_image.php»
enctype=»multipart/form-data»

Напомню, что атрибут action указывает файл, который будет выполнять загрузку файлов изображения. Атрибут enctype указывает на способ кодирования содержимого формы и информацию о подгрузке файлов. Посмотрите, как правильно заполнять атрибут enctype чтобы, избежать .

Примечание: поддержка загрузки нескольких файлов была введена в версии 3.0.10.

Написание кода PHP для сохранения изображения в базе данных MySQL

Так как мы отправляем два файла в атрибуте name после слова указываем «userfile» с квадратными скобками, этим мы даем понять, что отправляем несколько файлов с помощью массива, в котором находятся атрибуты файлов:

$_FILES[‘userfile’][‘name’]

Оригинальное имя файла на клиентской машине.

$_FILES[‘userfile’][‘type’]

mime-тип файла, если браузер предоставил эту информацию.
Пример: "image/gif" .

$_FILES[‘userfile’][‘size’]

$_FILES[‘userfile’][‘tmp_name’]

Временное имя файла, под которым загруженный файл был сохранён на сервере.

Как получить значения каждого файла?

К примеру, предположим, что отправлены файлы с именами /home/test/1.jpg и /home/test/2.jpg.

В этом случае $_FILES[‘userfile’][‘name’]
будет содержать значение 1.jpg,
а $_FILES[‘userfile’][‘name’]
— значение 2.jpg

Аналогично, $_FILES[‘userfile’][‘size’] будет содержать значение размера файла 1.jpg, и так далее. Теперь рассмотрим код файла add_image.php, который был указан в атрибуте формы action .

1024*1024||$image_size==0) { $ErrorDescription="Каждое изображение не должно привышать 1Мб! Изображение в базу не может быть добавлено."; return ""; } // Если файл пришел, то проверяем графический // ли он (из соображений безопасности) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") { //Читаем содержимое файла $image=file_get_contents($_FILES["userfile"]["tmp_name"][$num]); //Экранируем специальные символы в содержимом файла $image=mysql_escape_string($image); return $image; }else{ ErrorDescription="Вы загрузили не изображение, поэтому оно не может быть добавлено."; return ""; } }else{ $ErrorDescription="Вы не загрузили изображение, поле пустое, поэтому файл в базу не может быть добавлен."; return ; } return $image; } ?>

Итак, в этой статье мы говорили о том, как сохранить изображение в базе данных MySQL, используя PHP.

Последнее обновление: 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-инъекций.