KnigaRead.com/

Нина Савельева - Курс "Язык программирования PHP"

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн Нина Савельева, "Курс "Язык программирования PHP"" бесплатно, без регистрации.
Перейти на страницу:

[, целое client_flags]]]]])


Данная функция устанавливает соединение с сервером MySQL и возвращает указатель на это соединение или FALSE в случае неудачи. Для отсутствующих параметров устанавливаются следующие значения по умолчанию:


server = 'localhost:3306'

username = имя пользователя владельца

процесса сервера

password = пустой пароль


Если функция вызывается дважды с одними и теми же параметрами, то новое соединение не устанавливается, а возвращается ссылка на старое соединение. Чтобы этого избежать, используют параметр new_link, который заставляет в любом случае открыть еще одно соединение.


Параметр client_flags - это комбинация следующих констант: MYSQL_CLIENT_COMPRESS (использовать протокол сжатия), MYSQL_CLIENT_IGNORE_SPACE (позволяет вставлять пробелы после имен функций), MYSQL_CLIENT_INTERACTIVE (ждать interactive_timeout секунд - вместо wait_timeout - до закрытия соединения).


Параметр new_link появился в PHP 4.2.0, а параметр client_flags - в PHP 4.3.0.


Соединение с сервером закрывается при завершении исполнения скрипта, если оно до этого не было закрыто с помощью функции mysql_close().


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


<?

$conn = mysql_connect(

"localhost", "nina","123")

or die("Невозможно установить

соединение: ". mysql_error());

echo "Соединение установлено";

mysql_close($conn);

?>


Действие mysql_connect равносильно команде


shell>mysql -u nina -p123


Выбор базы данных


После установки соединения нужно выбрать базу данных, с которой будем работать. Наши данные хранятся в базе данных book. В MySQL выбор базы данных осуществляется с помощью команды use:


mysql>use book;


В PHP для этого существует функция mysql_select_db.


Синтаксис mysql_select_db:


логическое mysql_select_db (

строка database_name

[, ресурс link_identifier])


Эта функция возвращает TRUE в случае успешного выбора базы данных и FALSE - в противном случае.


Сделаем базу данных book рабочей:


<?

$conn = mysql_connect(

"localhost","nina","123")

or die("Невозможно установить

соединение: ". mysql_error());

echo "Соединение установлено";

mysql_select_db("book");

?>


Получение списка полей таблицы


Теперь можно заняться собственно решением задачи. Как получить список полей таблицы? Очень просто. В PHP и на этот случай есть своя команда - mysql_list_fields.


Синтаксис mysql_list_fields


ресурс mysql_list_fields (

строка database_name,

строка table_name

[, ресурс link_identifier])


Эта функция возвращает список полей в таблице table_name в базе данных database_name. Получается, что выбирать базу данных нам было необязательно, но это пригодится позже. Как можно заметить, результат работы этой функции - переменная типа ресурс. То есть это не совсем то, что мы хотели получить. Это ссылка, которую можно использовать для получения информации о полях таблицы, включая их названия, типы и флаги.


Функция mysql_field_name возвращает имя поля, полученного в результате выполнения запроса. Функция mysql_field_len возвращает длину поля. Функция mysql_field_type возвращает тип поля, а функция mysql_field_flags возвращает список флагов поля, записанных через пробел. Типы поля могут быть int, real, string, blob и т.д. Флаги могут быть not_null, primary_key, unique_key, blob, auto_increment и т.д.


Синтаксис у всех этих команд одинаков:


строка mysql_field_name (

ресурс result, целое field_offset)

строка mysql_field_type (

ресурс result, целое field_offset)

строка mysql_field_flags (

ресурс result, целое field_offset)

строка mysql_field_len (

ресурс result, целое field_offset)


Здесь result - это идентификатор результата запроса (например, запроса, отправленного функциями mysql_list_fields или mysql_query (о ней будет рассказано позднее)), а field_offset - порядковый номер поля в результате.


Вообще говоря, то, что возвращают функции типа mysql_list_fields или mysql_query, представляет собой таблицу, а точнее, указатель на нее. Чтобы получить из этой таблицы конкретные значения, нужно задействовать специальные функции, которые построчно читают эту таблицу. К таким функциям и относятся mysql_field_name и т.п. Чтобы перебрать все строки в таблице результата выполнения запроса, нужно знать число строк в этой таблице. Команда mysql_num_rows(ресурс result) возвращает число строк во множестве результатов result.


А теперь попробуем получить список полей таблицы Artifacts (коллекция экспонатов).


<?

$conn = mysql_connect(

"localhost","nina","123")

or die("Невозможно установить

соединение: ". mysql_error());

echo "Соединение установлено";

mysql_select_db("book");

$list_f = mysql_list_fields (

"book","Artifacts",$conn);

$n = mysql_num_fields($list_f);

for($i=0;$i<$n; $i++){

$type = mysql_field_type($list_f, $i);

$name_f = mysql_field_name($list_f,$i);

$len = mysql_field_len($list_f, $i);

$flags_str = mysql_field_flags (

$list_f, $i);

echo "<br>Имя поля: ". $name_f;

echo "<br>Тип поля: ". $type;

echo "<br>Длина поля: ". $len;

echo "<br>Строка флагов поля: ".

$flags_str . "<hr>";

}

?>


В результате должно получиться примерно вот что (если в таблице всего два поля, конечно):


Имя поля: id

Тип поля: int

Длина поля: 11

Строка флагов поля:

not_null primary_key auto_increment

Имя поля: title

Тип поля: string

Длина поля: 255

Строка флагов поля:


Отображение списка полей в html-форму


Теперь немножко подкорректируем предыдущий пример. Будем не просто выводить информацию о поле, а отображать его в подходящий элемент html-формы. Так, элементы типа BLOB переведем в textarea (заметим, что поле description, которое мы создавали с типом TEXT, отображается как имеющее тип BLOB), числа и строки отобразим в текстовые строки ввода <input type=text>, а элемент, имеющий метку автоинкремента, вообще не будем отображать, поскольку его значение устанавливается автоматически.


Все это решается довольно просто, за исключением выделения из списка флагов флага auto_increment. Для этого нужно воспользоваться функцией explode.


Синтаксис explode:


массив explode( строка separator,

строка string [, int limit])


Эта функция разбивает строку string на части с помощью разделителя separator и возвращает массив полученных строк.


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


Итак, создадим форму для ввода данных в таблицу Artifacts:


Запись данных в базу данных


Итак, форма создана. Теперь нужно сделать самое главное - отправить данные из этой формы в нашу базу данных. Как вы уже знаете, для того чтобы записать данные в таблицу, используется команда 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, обрабатывающем данные формы, как переменные вида

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*