Соединение с базой данных

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

- int mysql_connect([string $hostname] [,string $username][,string $password])

Функция mysql_connect() устанавливает сетевое соединение с базой данных MySQL, расположенной на хосте $hostname (по умолчанию это localhost, т. е. текущий компьютер), и возвращает идентификатор открытого соединения. Вся дальнейшая работа ведется с этим идентификатором. При регистрации указывается имя пользователя $username и пароль $password (по умолчанию имя пользователя, от которого запущен текущий процесс, и пустой пароль). Строка $hostname также может включать в себя номер порта в формате: имя_хоста:порт (если сервер MySQL настроен не на стандартный, а на какой-то другой порт). При следующем запуске функции с теми же самыми аргументами второе соединение не будет открыто, а функция возвратит идентификатор уже существующего.

Соединение с MySQL-сервером будет автоматически закрыто по завершении работы сценария, либо при вызове функции mysql_close().

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

До того как послать первый запрос серверу MySQL, необходимо указать, с какой базой данных необходимо работать. Для этого предназначена функция mysql_select_db().

- int mysql_select_db(string $dbname [,int $link_identifier])

Она уведомляет PHP, что в дальнейших операциях с соединением $link_identifier (или с последним открытым соединением, если указанный параметр не задан) будет использоваться база данных $dbname.

Обработка ошибок.Если в процессе работы с MySQL возникают ошибки, то сообщение об ошибке и ее номер можно получить с помощью следующих двух функций.

- int mysql_errno([int $link_identifier])

Функция возвращает номер последней зарегистрированной ошибки. Идентификатор соединения $link_identifier можно не указывать, если за время работы сценария было установлено только одно соединение.

- string mysql_error([int $link_identifier])

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

Выполнение запросов к базе данных

Для формирования запросов к базе данных существует функция – mysql_query(), которая возвращает идентификатор результирующего набора данных.

- int mysql_query (string $query [,int $link_identifier])

Эта функция посылает MySQL-серверу запрос $query и возвращает идентификатор ответа, или результата. Параметр $query представляет собой строку, составленную по правилам языка SQL. Используется установленное ранее соединение $link_identifier, а в случае его отсутствия – последнее открытое соединение.

Есть несколько команд SQL, которые возвращают только признак, успешно они выполнились или нет (это команды UPDATE, INSERT и т. д.). В этом случае этот признак и будет возвращен функцией. Для запроса SELECT возвращается идентификатор вывода, нулевое значение которого свидетельствует о том, что произошла ошибка.

Создание таблицы

- create table ИмяТаблицы (ИмяПоля тип, ИмяПоля тип, ...)

В базе данных создается новая таблица с колонками (полями), определяемыми своими именами (ИмяПоля) и указанными типами.

Удаление таблицы:

- drop table ИмяТаблицы

Удаляет таблицу ИмяТаблицы. Таблица не обязательно должна быть пустой.

Вставка записи:

- insert into ИмяТаблицы(ИмяПоля1 ИмяПоля2 ...) values('зн1','зн2',...)

Добавляет в таблицу ИмяТаблицы запись, у которой поля, обозначенные как ИмяПоляN, установлены в значения, соответственно, знN. Те поля, которые в этой команде не перечислены, получают «неопределенные» значения (неопределенное значение – это не пустая строка, а просто признак, который говорит MySQL, что у данного поля нет никакого значения). Если для не указанного здесь поля при создании таблицы был задан not null, то данная команда закончится неуспешно. Значения полей можно заключать в апострофы и в обычные кавычки. При вставке в таблицу бинарных данных (или текстовых, содержащих апострофы и слэши) некоторые символы \, ' и символ с нулевым кодом должны быть «защищены» обратными слэшами.

Удаление записей:

- delete from ИмяТаблицы where Выражение

Удаляет из таблицы ИмяТаблицы все записи, для которых выполнено Выражение. Параметр Выражение – это логическое выражение, например

(id<10) and (name regexp 'a*b') and (age=25).

Поиск записей:

- select * from Таблица where Выражение [order by ИмяПоля [desc]]

Команда предназначена для того, чтобы искать все записи, удовлетворяющие выражению Выражение. Если записей несколько, то при указанном предложении order by они будут отсортированы по тому полю, имя которого записывается правее этого ключевого слова (если задан описатель desc, то упорядочивание происходит в обратном порядке). В предложении order by могут задаваться несколько полей. Символ * предписывает, что из отобранных записей следует извлечь все поля, когда будет выполнена команда получения выборки. Вместо звездочки можно через запятую непосредственно перечислить имена полей, которые требуют извлечения.

Обновление записей:

- update Таблица set (ИмяПоля1='зн1',

ИмяПоля1='зн2', ...) where Выражение

В таблице Таблица для всех записей, удовлетворяющих выражению Выражение, указанные поля устанавливаются в соответствующие значения.

Получение числа записей, удовлетворяющих выражению:

select count(if(Выражение,1,NULL)) from Таблица

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

select distinct Country from Таблица where age>=30

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

Получение результата. Результатом выполнения запроса является набор данных и количество вошедших в него записей. Каждая запись – это список значений полей в том же порядке, в котором они были указаны в запросе select ... from Таблица на месте многоточия (если там была звездочка, то все поля). Таким образом, результат – это своеобразный двумерный массив: первый индекс – номер записи и второй – имя поля.

Параметры результата:

- int mysql_num_rows(int $result)

Функция возвращает число записей в результате запроса.

- int mysql_num_fields(int $result)

Функция возвращает число полей в одной строке результата.

Получение поля результата:

- int mysql_result (int $result, int $row, mixed $field)

Функция возвращает значение поля $field в строке результата с номером $row. Параметр $field может задавать не только имя поля, но и его номер – позицию, на которой столбец «стоял» при создании таблицы.

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

- array mysql_fetch_row(int $result)

Функция возвращает массив-список со значениями полей очередной строки результата $result. Если указатель текущей позиции результата был установлен за последней записью, возвращает false. Текущая позиция сдвигается к следующей записи, так что очередной вызов mysql_fetch_row() вернет следующую строку результата. Пример:

$r=mysql_query ("select * frim OurTable where age<30");

while($Row=mysql_fetch_row($r))

{ // обрабатываем строку $Row }

Цикл оборвется, как только строки закончатся, т. е. когда mysql_fetch_row() вернет false.

Работать с числовыми индексами полей неудобно. Лучше использовать для адресации поля внутри результата его имя.

- array mysql_fetch_array(int $result)

Функция возвращает очередную строку результата в виде ассоциативного массива, где каждому полю сопоставлен элемент с ключом, совпадающим с именем поля. Дополнительно в массив записываются элементы с числовыми ключами и значениями, соответствующими величинам полей с этими индексами. В возвращаемом массиве они размещаются сразу за элементами с «обычными» ключами.

- int mysql_data_seek (int $result, int $row_number)

Функция устанавливает указатель текущей строки в результате $result в позицию $row_number, так что следующий вызов mysql_fetch_row() и mysql_fetch_array() вернет значения полей именно этой строки. Возвращает false в случае ошибки или если строки кончились.

Получение информации о результате:

- string mysql_field_name(int $result, int $field_index)

Функция возвращает имя поля, которое расположено в результате по смещению $field_index.

- string mysql_field_type(int $result, int $field_offset)

Функция возвращает тип соответствующей колонки в результате. Им может быть, например, int, double и т. д.

- int mysql_field_len(int $result, int $field_offset)

Функция возвращает длину поля в результате $result. Поле задается указанием его смещения. Под длиной подразумевается тот размер, который был указан при его создании. Например, если полеимеет тип varchar и было создано (вместе с таблицей) с типом varchar(100), то для него будет возвращено 100.

- string mysql_field_flags(int $result, int $field_offset)

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

$Flags=explode(" ", mysql_field_flags($r, $field_offset));


Наши рекомендации