Итак, форма создана. Теперь нужно сделать самое главное - отправить данные из этой формы в нашу базу данных. Как вы уже знаете, для того чтобы записать данные в таблицу, используется команда INSERT языка SQL. Например:
mysql> INSERT INTO Artifacts SET title='Петров';
Возникает вопрос, как можно воспользоваться такой командой (или любой другой командой SQL) в PHP скрипте. Для этого существует функция mysql_query().
Синтаксис mysql_query
ресурс mysql_query ( строка query [, ресурс link_identifier])
mysql_query() посылает SQL-запрос активной базе данных MySQL сервера, который определяется с помощью указателя link_identifier (это ссылка на какое-то соединение с сервером MySQL). Если параметр link_identifier опущен, используется последнее открытое соединение. Если открытые соединения отсутствуют, функция пытается соединиться с СУБД, аналогично функции mysql_connect() без параметров. Результат запроса буферизируется.
Замечание: строка запроса НЕ должна заканчиваться точкой с запятой.
Только для запросов SELECT, SHOW, EXPLAIN, DESCRIBE, mysql_query() возвращает указатель на результат запроса, или FALSE, если запрос не был выполнен. В остальных случаях mysql_query() возвращает TRUE, если запрос выполнен успешно, и FALSE - в случае ошибки. Значение, не равное FALSE, говорит о том, что запрос был выполнен успешно. Оно не говорит о количестве затронутых или возвращенных рядов. Вполне возможна ситуация, когда успешный запрос не затронет ни одного ряда. mysql_query() также считается ошибочным и вернет FALSE, если у пользователя недостаточно прав для работы с указанной в запросе таблицей.
Итак, теперь мы знаем, как отправить запрос на вставку строк в базу данных. Заметим, что в предыдущем примере элементы формы мы назвали именами полей таблицы. Поэтому они будут доступны в скрипте insert.php, обрабатывающем данные формы, как переменные вида
$_POST['имя_поля'].
<? $conn=mysql_connect("localhost","nina","123");// устанавливаем // соединение $database = "book"; $table_name = "Artifacts"; mysql_select_db($database); // выбираем базу данных $list_f = mysql_list_fields($database,$table_name); // получаем список полей в базе $n = mysql_num_fields($list_f); // число строк в результате // предыдущего запроса // составим один запрос сразу для всех полей таблицы $sql = "INSERT INTO $table_name SET "; // начинаем создавать // запрос, перебираем все поля таблицы for($i=0;$i<$n; $i++){ $name_f = mysql_field_name ($list_f,$i); // вычисляем имя поля $value = $_POST[$name_f]; // вычисляем значение поля $j = $i + 1; $sql = $sql . $name_f." = '$value'"; // дописываем в // строку $sql пару имя=значение if ($j <> $n) $sql = $sql . ", "; // если поле не // последнее в списке, то ставим запятую } // перед тем как записывать что-то в базу, // можно посмотреть, какой запрос получился //echo $sql; $result = mysql_query($sql,$conn); // отправляем запрос // выводим сообщение успешно ли выполнен запрос if (!$result) echo " Can't add ($table_name) "; else echo "Success!<br>"; ?>
Листинг 11.0.2. insert.php
Итак, задачу добавления данных с помощью web-интерфейса мы решили. Однако тут есть одна тонкость. При решении мы не учитывали тот факт, что значения некоторых полей (author, photo) должны браться из других таблиц (Persons, Images). Поскольку MySQL с внешними ключами не работает, этот момент остается на совести разработчиков системы, т.е. на нашей совести. Нужно дописать программу таким образом, чтобы была возможность вводить в такие поля правильные значения. Но мы делать этого не будем, поскольку задача лекции состоит в том, чтобы познакомить читателя с элементами технологии, а не в том, чтобы создать работающую систему. Кроме того, имеющихся у читателя знаний вполне достаточно, чтобы решить эту проблему самостоятельно. Мы же обратимся к другой задаче - отображение данных, хранящихся в базе данных СУБД MySQL.