Сайт компьютерных навыков

Построчная запись в бд mysql. Добавление данных в PHP. Наиболее распространённые ошибки начинающих

В этом уроке мы рассмотрим, как вставлять данные в БД непосредственно из ваших РНР-скриптов.

Вставка данных с использованием SQL

Вы используете SQL для вставки данных в БД точно так же, как используете SQL для создания БД и таблиц. Синтаксис SQL-запроса таков:

INSERT INTO ИмяТаблицы(столбец1, столбец 2, ...) VALUES(значение1, значение 2, ...)

Как видите, вы можете обновлять несколько столбцов в одном SQL-операторе, указывая их в разделённом запятыми списке. Но разумеется, можно также специфицировать только один столбец и одно значение. Столбцы, не упомянутые в данном SQL-операторе, останутся пустыми.

Пример: Вставка новой персоны в таблицу

В этом примере мы используем БД из Урока 18 . Скажем, мы хотим вставить персону в БД. Это может быть Gus Goose с номером телефона 99887766 и датой рождения 1964-04-20 .

Оператор SQL может выглядеть так:

$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES("Gus","Goose","99887766 ","1964-04-20")";

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

strSQL = "INSERT INTO people("; strSQL = strSQL . "FirstName, "; strSQL = strSQL . "LastName, " strSQL = strSQL . "Phone, "; strSQL = strSQL . "birth) "; strSQL = strSQL . "VALUES ("; strSQL = strSQL . ""Gus", "; strSQL = strSQL . ""Goose", "; strSQL = strSQL . ""99887766", "; strSQL = strSQL . ""1964-04-20")"; mysql_query($strSQL) or die(mysql_error());

Здесь SQL-оператор строится с разделением предложения на небольшие части с последующим объединением их в переменную $strSQL .

На практике нет разницы в применении того или другого метода, но при работе с большими таблицами становится крайне важной возможность "держать след", так что выбирайте наиболее подходящий метод.

Попробуем выполнить следующий код для вставки Gus Goose в БД:

Вставка данных в БД // Соединение с сервером БД mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ()); // Выбор БД mysql_select_db("mydatabase") or die(mysql_error()); // Построение SQL-оператора $strSQL = "INSERT INTO people("; $strSQL = $strSQL . "FirstName, "; $strSQL = $strSQL . "LastName, "; $strSQL = $strSQL . "Phone, "; $strSQL = $strSQL . "BirthDate) "; $strSQL = $strSQL . "VALUES("; $strSQL = $strSQL . ""Gus", "; $strSQL = $strSQL . ""Goose", "; $strSQL = $strSQL . ""99887766", "; $strSQL = $strSQL . ""1964-04-20")"; // SQL-оператор выполняется mysql_query($strSQL) or die (mysql_error()); // Закрытие соединения mysql_close(); ?>

БД обновлена!

Сохранение пользовательского ввода в БД

Вы, вероятно, уже сообразили, что для этого можно создать форму, как в Уроке 11 , а значения из формы можно вставить в SQL-оператор. Предположим, у вас имеется простая форма:

Эта форма отправляется в файл insert.php , где вы, как показано в Уроке 11, можете получить пользовательский ввод, запросив содержимое формы. В данном конкретном случае SQL-оператор может быть таким:

strSQL = "INSERT INTO people(FirstName) values("" . $_POST["FirstName"] . "")"

Аналогично можно запросить данные кук, сессий строк запроса etc.

Наиболее распространённые ошибки начинающих

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

Неверный тип данных

Важно, чтобы данные и тип данных столбца соответствовали друг другу. Каждый столбец может содержать данные определённого типа. Следующий скриншот показывает типы данных таблицы "people" из нашего примера.

Выдаётся ошибка, если вы, например, попытаетесь вставить текст или число в поле данных. Следовательно, устанавливайте тип данных как можно точнее.

Ниже перечислены наиболее употребительные типы данных:

Значение Тип Данных Размер
CHR
Текст или комбинация текста и чисел. Может также использоваться для числе, не используемых при расчётах (напр., номера телефонов). До 255 символов - либо длина, определяемая в "Length"
TEXT
Большие блоки текста или комбинация текста и чисел. До 65,535 символов
INT
Числовые данные для математических вычислений. 4 байта
DATE
Даты в формате ГГГ-ММ-ДД 3 байта
TIME
Время в формате чч:мм:сс 3 байта
DATETIME
Дата и время в формате ГГГ-ММ-ДД чч:мм:сс 8 байт

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

























Отправка запроса
Имя:
E-Mail:
Тема сообщения:
Сообщение:
























Шаг четвертый: Создание обработчика формы "save_form.php " с сохранением полученных данных в MySQL

save_form.php:





/* Таблица MySQL, в которой будут храниться данные */
$table = "test_table";

/* Создаем соединение */

/* Определяем текущую дату */
$cdate = date("Y-m-d");

/* Составляем запрос для вставки информации в таблицу
name...date - название конкретных полей в базе;
в $_POST["test_name"]... $_POST["test_mess"] - в этих переменных содержатся данные, полученные из формы */
$query = "INSERT INTO $table SET name="".$_POST["test_name"]."", email="".$_POST["test_mail"]."",
theme="".$_POST["test_theme"]."", message="".$_POST["test_mess"]."", data="$cdate"";

/* Закрываем соединение */
mysql_close();

/* В случае успешного сохранения выводим сообщение и ссылку возврата */
echo ("


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



Вернуться назад
");

Шаг пятый: Вывод сохраненных данных "view_data.php "

view_data.php:

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test_base"; // название базы данных


$table = "test_table";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Составляем запрос для извлечения данных из полей "name", "email", "theme",
"message", "data" таблицы "test_table" */
$query = "SELECT id, name, email, theme, message, data FROM $table";

/* Выполняем запрос. Если произойдет ошибка - вывести ее. */


echo ("

Вывод данных из MySQL

Вывод ранее сохраненных данных из таблицы MySQL










");



echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n\n";
}

Echo ("

# Дата обращения Имена пользователей E-Mail пользователей Тема сообщения Сообщения пользователей
".$row["id"]."".$row["data"]."".$row["name"]."".$row["email"]."".$row["theme"]."".$row["message"]."
\n");

/* Закрываем соединение */
mysql_close();

Шаг шестой: Удаление записей из базы данных "del_data.php "

del_data.php:

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test_base"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */
$table = "test_table";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата ссылка удаления, удаляем запись */
$del = $query = "delete from $table where (id="$del")";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());



/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());

$row = mysql_num_rows($res);

/* Выводим данные из таблицы */
echo ("

Вывод и удаление данных из MySQL

Вывод и удаление ранее сохраненных данных из таблицы MySQL











");

/* Цикл вывода данных из базы конкретных полей */
while ($row = mysql_fetch_array($res)) {
echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
/* Генерируем ссылку для удаления поля */
echo "\n";
echo "\n";
}

Echo ("

# Дата обращения Имена пользователей E-Mail пользователей Тема сообщения Сообщения пользователей Удаление
".$row["id"]."".$row["data"]."".$row["name"]."".$row["email"]."".$row["theme"]."".$row["message"]."Удалить
\n");

/* Закрываем соединение */
mysql_close();

Шаг седьмой: Редактирование и обновление записей в базе "update_data.php "

update_data.php:

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test_base"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */
$table = "test_table";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата кнопка редактирования, вносим изменения */
if(@$submit_edit) {
$query = "UPDATE $table SET name="$test_name", email="$test_mail", theme="$test_theme", message="$test_mess" WHERE id="$update"";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die (mysql_error());
}

/* Заносим в переменную $res всю базу данных */
$query = "SELECT * FROM $table";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Узнаем количество записей в базе данных */
$row = mysql_num_rows($res);

/* Выводим данные из таблицы */
echo ("

Редактирование и обновление данных

Редактирование и обновление данных в таблице MySQL


");

/* Цикл вывода данных из базы конкретных полей */
while ($row = mysql_fetch_array($res)) {
echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "
#".$row["id"]."
".$row["data"]."
Имя пользователя:
E-Mail пользователя:
Тема сообщения:
Сообщение:
\n\n";
}

/* Закрываем соединение */
mysql_close();

Ну вот и все, приятного кодинга:1133:

_________________________________

В этом руководстве вы познакомитесь с тем, как начать управлять базой данных из вашего PHP скрипта. Вы изучите добавление записи в таблицу MySQL, используя PHP код . Перед тем как начать, ознакомьтесь с нашими другими руководствами, которые раскрывают основные шаги работы с PHP и базами данных – подключение из PHP к базе данных MySQL (англ.).

Перед началом проверьте наличие следующего:

  • Доступ к вашей панели управления хостингом

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

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

После входа на страницу phpMyAdmin вы увидите подобную картину:

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

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

Приведём здесь несколько простых пояснение полей, которые мы будем использовать:

  • Name – это имя вашего поля. Будет отображено в самом верху вашей таблицы.
  • Type – здесь можно установить тип поля. Например, мы выбираем varchar , потому что здесь нам нужно ввести строку с именем (в котором есть буквы, не цифры).
  • Length/Values – используется для задания максимальной длины вашей записи в этом поле.
  • Index – мы используем индекс “Primary” для нашего поля “ID”. Когда создаётся таблица, рекомендуется иметь одно поле ID. Она используется для индексации записей в таблице, когда настраиваются взаимосвязи между таблицами. Здесь также можно отметить “A_I” , что означает Auto Increment . Эта настройки будет автоматически увеличивать индекс (1,2,3,4…).

Нажмите Save и ваша таблица будет создана.

Шаг 2 - Создание PHP кода и добавление записи в таблицу MySQL

Вариант 1 – Метод MySQLi

Прежде всего, нужно установить соединение с базой данных, согласно нашему предыдущему руководству . После этого мы можем продолжить с SQL запросом на добавление записи в таблицу MySQL – 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 – это выражение, которое добавляет запись в указанную таблицу базы данных MySQL. В нашем примере мы добавляем данные в таблицу Students .

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

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

Что важно отметить, что тут мы формируем запрос SQL , используя PHP код. SQL запросы должны быть заключены в кавычки. В нашем примере, всё между кавычками и идущее после $sql = это SQL запрос.

Следующая часть кода (20 – 22 строки) запускает наш запрос и производит проверку успешности выполнения запроса:

If (mysqli_query($conn, $sql)) { echo "New record created successfully"; }

Выводится сообщение об удаче, если запрос был запущен верно.

И заключительная часть (22 – 24 строки) показывают другое сообщение, на случай неудачного выполнения нашего запроса:

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

Этот код отображает нам сообщение об ошибке, на случай, если что-то пошло не так.

Вариант 2 – Метод объектов данных PHP (P HP D ata O bject)

Как и в предыдущем примере, нам нужно прежде всего выполнить подключение к базе данных, которое производится при создании нового объекта PDO – предыдущее руководство рассказывает о том, как это происходит. Поскольку подключение к базе данных MySQL – это PDO объект, мы должны использовать различные PDO ‘методы’ (своего рода функции, которые являются частью определённого объекта) для подготовки и запуска запроса. Методы объектов вызываются таким образом:

$the_Object->the_Method();

PDO позволяет ‘подготовить’ SQL код перед его выполнением. Запрос SQL вычисляется и корректируется перед запуском. Так, простая атака путём SQL инъекции может быть выполнена заполняя код SQL в поле формы. Например:

// User writes this in the username field of a login form thom"; DROP DATABASE user_table; // The final query becomes this "SELECT * FROM user_table WHERE username = thom"; DROP DATABASE user_table;

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

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

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

В правильном виде код выглядит:

$servername = "mysql.hostinger.com"; $database = "u266072517_name"; $username = "u266072517_user"; $password = "buystuffpwd"; $sql = "mysql:host=$servername;dbname=$database;"; $dsn_Options = ; // Create a new connection to the MySQL database using PDO, $my_Db_Connection is an object try { $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options); echo "Connected successfully"; } catch (PDOException $error) { echo "Connection error: " . $error->getMessage(); } // Set the variables for the person we want to add to the database $first_Name = "Thom"; $last_Name = "Vial"; $email = "[email protected]"; // Here we create a variable that calls the prepare() method of the database object // The SQL query you want to run is entered as the parameter, and placeholders are written like this:placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Now we tell the script which variable each placeholder actually refers to using the bindParam() method // First parameter is the placeholder in the statement above - the second parameter is a variable that it should refer to $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement->bindParam(:email, $email); // Execute the query using the data we just defined // The execute() method returns TRUE if it is successful and FALSE if it is not, allowing you to write your own messages here if ($my_Insert_Statement->execute()) { echo "New record created successfully"; } else { echo "Unable to create record"; } // At this point you can change the data of the variables and execute again to add more data to the database $first_Name = "John"; $last_Name = "Smith"; $email = "[email protected]"; $my_Insert_Statement->execute(); // Execute again now that the variables have changed if ($my_Insert_Statement->execute()) { echo "New record created successfully"; } else { echo "Unable to create record"; }

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

  • bindParam() – этот метод подсчитывает данные, когда метод execute() достигнут. Первый раз, когда скрипт доходит до метода execute() он видит, что $first_Name ссылается на “Thom”, связывает это значение и выполняет запрос. Когда скрипт добирается второй раз до метода execute() , он смотрит, что $first_Name теперь ссылается на “John”, связывает это значение и запускает запрос опять с новым значением. Важно понимать, что мы создаём запрос один раз и затем подставляем разные данные в разных местах скрипта.
  • bindValue() – этот метод вычисляет данные, как только до него доходит очередь. Так как значение $first_Name было задано как “Thom”, на момент, когда мы достигли метода bindValue() , оно будет использован при вызове метода execute() для $my_Insert_Statement .

Обратите внимание, что мы повторно используем переменную $first_Name и задаём ей новое значение во второй раз. Если вы проверите свою базу данных после запуска этого скрипта, там будут оба из заданных имени, вопреки этому значение переменной $first_Name будет равно “John” в конце этого скрипта. Помните, что PHP оценивает содержимое скрипта перед его запуском.

Если вы измените свой скрипт заменив bindParam на bindValue , вы добавите в базу MySQL “Thom Vial” дважды в базу данных и John Smith будет проигнорирован.

Шаг 3 - Проверка успешности выполнения и решение общих вопросов

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

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

MySQLi

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

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

"Error: INSERT INTO Students {name, lastname, email} VALUES ("Thom", "Vial", "[email protected]") You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax 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: Uncaught exception "PDOException" with message "SQLSTATE: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "{name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")" at line 1"

Другие проблемы, с которым вы можете столкнуться:

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

Все эти ошибки могут быть исправлены следуя руководствам по исправлению ошибок или проверяя журнал ошибок (англ.).

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

Заключение

В этом руководстве вы изучили, как использовать PHP код для добавления записи в таблицу MySQL с использованием MySQLi и PDO . Также рассмотрели случаи распространённых ошибок и их решения. Знание того, как использовать PHP код, чтобы добавить в базу данных MySQL пригодится независимо от того, вы учитесь программировать или уже создаёте свой сайт.

В этой статье мы разберём, пожалуй, одни из самых важных SQL-запросов . Это запросы на добавление и удаление записей из таблицы базы данных . Поскольку, ОЧЕНЬ часто приходится добавлять новые записи в таблицу , причём делать это в автоматическом режиме, то данный материал обязателен к изучению.

Для начала SQL-запрос на добавление новой записи в таблицу :

INSERT INTO users (login, pass) values("TestUser", "123456")

При добавлении записи вначале идёт команда "INSERT INTO ", затем название таблицы, в которую мы вставляем запись. Далее идёт в круглых скобках названия полей, которые мы хотим заполнить. А затем в круглых скобках после слова "values " начинаем перечислять значения тех полей, которые мы выбрали. После выполнения этого запроса в нашей таблице появится новая запись.

Иногда требуется обновить запись в таблице , для этого существует следующий SQL-запрос :

UPDATE users SET login = "TestUser2", pass="1234560" WHERE login="TestUser"

Данный запрос является более сложным, так как он имеет конструкцию "WHERE ", но о ней чуть ниже. Вначале идёт команда "UPDATE ", затем имя таблицы, а после "SET " мы описываем значения всех полей, которые мы хотим изменить. Было бы всё просто, но встаёт вопрос: "А какую именно запись следует обновлять? ". Для этого существует "WHERE ". В данном случае мы обновляем запись, поле "login " у которой имеет значение "TestUser ". Обратите внимание, что если таких записей будет несколько, то обновятся абсолютно все ! Это очень важно понимать, иначе Вы рискуете потерять свою таблицу.

Давайте немного ещё поговорим о "WHERE ". Помимо простых проверок на равенство существуют так же и неравенства, а также логические операции: AND и OR .

UPDATE users SET login = "TestUser2", pass="1234560" WHERE id < 15 AND login="TestUser"

Данный SQL-запрос обновит те записи, id которых меньше 15 И поле "login " имеет значение "TestUser ". Надеюсь, Вы разобрались с конструкцией "WHERE ", потому что это очень важно. Именно "WHERE " используется при выборке записей из таблиц , а это самая частоиспользуемая задача при работе с базами данных.

И, напоследок, простой SQL-запрос на удаление записей из таблицы :

DELETE FROM users WHERE login="TestUser2"

После команды "DELETE FROM " идёт имя таблицы, в которой требуется удалить записи. Дальше описываем конструкцию "WHERE". Если запись будет соответствовать описанным условиям, то она будет удалена. Опять же обратите внимание, в зависимости от количества записей, удовлетворяющих условию после "WHERE ", может удалиться любое их количество.

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

Похожие публикации