Урок 19: Вставка данных в БД
В этом уроке мы рассмотрим, как вставлять данные в БД непосредственно из ваших РНР-скриптов.
Вставка данных с использованием 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')";
mysql_query($strSQL) or die(mysql_error());
Как видите, 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 в БД:
<html> <head> <title>Вставка данных в БД</title> </head> <body> <?php // Соединение с сервером БД 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(); ?> <h1>БД обновлена!</h1> </body> </html>
Сохранение пользовательского ввода в БД
Часто бывает необходимо сохранить в БД данные, вводимые пользователем.
Вы, вероятно, уже сообразили, что для этого можно создать форму, как в Уроке 11, а значения из формы можно вставить в SQL-оператор. Предположим, у вас имеется простая форма:
<form action="insert.php" method="post"> <input type="text" name="FirstName" /> <input type="submit" value="Save" /> </form>
Эта форма отправляется в файл 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-операторы с кавычками или обратными слэшами
Если вы попытаетесь вставить текст, содержащий символы одинарной кавычки ('), двойной кавычки (") или обратного слэша (\), запись не будет вставлена в БД. Решением будет подстановка обратных слэшей перед символами, которые должны мнемонизироваться при вставке в запросы БД.
Это делается функцией addslashes:
<?php $strText = "Is your name O'Reilly?"; $strText = addslashes($strText); ?>
Все двойные ('), одинарные (") кавычки м обратные слэши (\) получат дополнительный обратный слэш перед символом. Это делается только при вставке данных в БД, эти дополнительные \ не вставляются. Обратите внимание, что PHP запускает по умолчанию addslashes для всех данных $_GET, $_POST и $_COOKIE. Так что не используйте addslashes в строках, которые уже мнемонизированы.
В следующем уроке вы научитесь запрашивать данные из БД. Но сначала попытайтесь вставить несколько персон в вашу БД (как в примере с Gus Goose).