Функции PHP для работы с MySQL.

Соединение PHP - сценариев с таблицами MySQL.

Функция mysql_connect ([string &hostname] [, string &user] [,string &password]) - основная функция для подключения сценария к серверу баз данных и выполняет авторизацию пользователя. Все параметры функции являются необязательными, поскольку значения по умолчанию можно прописать в конфигурационном файле php.ini. Всегда можно указать другое имя MySQL - узла, имя пользователя и пароль. Параметр $hostname может быть указан в виде узел: порт.

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

Функция mysql_close (int $connection_id) - предназначена для закрытия соединения. Соединение можно не закрывать - он будет закрыто автоматически при завершении сценария. Если используется более соединения, при вызове mysql_close() нужно вызвать идентификатор соединения, которое необходимо закрыть. Все же рекомендуется закрывать соединения самостоятельно.

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

Постоянное соединение не закрывается после завершения работы сценария, даже если сценарий вызвал функцию mysql_close(). Соединение "привязывается" к PID потомка Apache (от имени которого он работает) и закрывается лишь тогда, когда удаляется процесс-владелец (например: перезагрузка).

PHP работает с постоянными соединениями примерно так: при вызове функции mysql_pconnect() PHP проверяет, было ли раньше установлено соединение. Если да, то возвращается его идентификатор, а если нет, отрывается новое соединение и также возвращается идентификатор. При работе с постоянными соединениями необходимо следить, чтобы максимальное число клиентов Apache не превышало максимального числа клиентов MySQL, то есть параметр MaxClient ( в файле конфигурации httpd.conf) должен быть меньше или равен параметру max_user_connection (парметр MySQL).

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

Функция mysql_select_db (string $db [, int $id]) выбирает базу данных, с которой будет работать сценарий. Если открыто не более одного соединения, можно не указывать параметр $id. Пример подключения к базе данных:

//  Пытаемся установить соединение

if (!mysql_connect ($SERVER, $USER, $PASSWORD))

{

echo "Не могу подключиться к серверу";

exit;

}

// Выбираем базу данных

mysql_select _db ($DB);

Обработка ошибок.

Функция mysql_errno (int $id) - возвращает номер ошибки, а функция mysql_error (int $id) - возвращает сообщение об ошибке. Совместное их использование позволяет сразу определить из-за чего произошла ошибка. Например:

echo "ERROR ".mysql_errno()." ".mysql_error()."\n";

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

Функция mysql_query() используется для выполнения запросов к базе данных. Ей необходимо передать один параметр - текст запроса. Текст запроса может содержать пробельные символы и символы новой строки (\n). При этом текст должен быть составлен по правилам SQL. Пример запроса:

$r = mysql_query ("select * from hbd");

Данный запрос возвращает содержимое таблицы hbd. Результат запроса присваивается переменной $r. Результат - это набор данных, который после выполнения запроса нужно обработать определенным образом.

Обработка результата запроса.

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

mysql_result() - получить нужный элемент из набора записей;

mysql_fetch_array() - занести запись в массив;

mysql_fetch_row() - занести запись в массив;

mysql_fetch_assoc() - занести запись в ассоциативный массив;

mysql_fetch_object() - занести запись в объект.

Перед тем как произвести разбор полученного результата, необходимо определить количество содержащихся в ней записей и полей. Функция mysql_num_rows() - позволяет узнать, сколько записей содержит результат:

$r = mysql_query ("select * from hbd");

echo "В таблице hbd ".mysql_num_rows($r)." записей";

Функция mysql_num_fields() - позволяет определить из скольких полей (колонок) состоит запись. Пример:

$r = mysql_query ("select * from hbd");

echo "В таблице hbd ".mysql_num_fields($r)." полей";

Функция mysql_result (int $result, int $row, mixed $field) -позволяет узнать значение каждого поля. Параметр $row задает номер записи, а параметр $field - имя или порядковый номер поля. Например, запрос вернул следующий набор данных:

Email

FirstName

LastName

ivan@mail.ru

Ivan

Ivanov

sid@mail.ru

Petr

Sidorov

Вывести в браузер его позволяет следующий код:

$rows = mysql_num_rows($r);

$cols = mysql_num_fields($r);

echo "<PRE>";

for ($i=0; $i<$rows; $i++)

{

    for ($j =0; $j<$cols; $j++)

        echo mysql_result ($r, $i, $j)."\t";

        echo "\n";

}

echo "</PRE>";

Функция mysql_result() универсальная, но медленная. Поэтому для обработки больших наборов записей рекомендуется использовать функции, имеющие в середине _fetch_, а именно mysql_fetch_row(), mysql_fetch_array(),  и т. п.

Функция mysql_fetch_row (int $res) получает сразу всю строку, соответствующую текущей записи результата $res. Каждый следующий вызов функции перемещает указатель запроса на следующую позицию (как при работе с файлами) и получает следующую запись. Если больше нет записей, то возвращает false. Пример использования:

$r = mysql_query("select * from hbd where month=\"$bd_m\" and day=\"$bd_d\");

for ($i=0; &i<mysql_num_rows($r); $i++)

{

$f=mysql_fetch_row($r);

echo $f;

}

Использовать функцию mysql_fetch_rows() не свегда удобно, поскольку значения всех полей одной записи находятся в одной строке. Удобнее воспользоваться функцией mysql_fetch_array(), возвращающую ассоциативный массив, ключами которого будут имена полей.

Функция mysql_fetch_assoc(int $res) возвращает "чистый" (с одним индексом) ассоциативный массив. Эта функция - просто синоним для mysql_fetch_assoc ($res, MYSQL_ASSOC).

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

Функция mysql_field_name (int $result, int $offset)  возвращает имя поля, находящегося в результате $result с номером $offset (нумерация начинается с 0). Другими словами, функция возвращает имя поля с номером $offset.

Функция mysql_field_type (int $result, int $offset) возвращает тип поля с номером $offset  в результате $result (номер задается относительно результата, а не таблицы).

Функция mysql_field_flags (int $result, int $offset) возвращает перечисленные через пробел флаги (модификаторы), которые имеются у поля с номером $offset. Все поддерживаемые MySQL флаги перечислены в таблице:

Флаг

Описание

  not_Null   Поле не может содержать неопределенного значения (NULL), то есть поле должно быть явно инициализировано.
  Primary_Key   Поле будет первичным ключом - идентификатором записи, по которому можно однозначно идентифицировать запись.
  auto_increment   При вставке новой записи значение этого поля будет автоматически увеличено на единицу, поэтому в таблице никогда не будет двух записей с одинаковым значением этого поля.
  Unique_Key   Поле должно содержать уникальное значение.
  Multiple_Key   Индекс.
  Blob   Поле может содержать бинарный блок данных.
  Unsigned   Поле содержит беззнаковые числа.
  Zerofill   Вместо пробелов используются символы с кодом \0
  enum   Поле может содержать один элемент из нескольких возможных (элемент перечисления).
  timestamp   В поле автоматически заносится текущая дата и время при его модификации.
  Binary   Поле содержит двоичные данные.

Функция mysql_field_flags() возвращает флаги в виде строки, в которой флаги разделяются пробелами.

Полноценный пример вывода содержимого таблицы и оформления в виде таблицы HTML:

<?

$SERVER = "localhost";

$USER = "user";

$PASSWORD = "12345";

$DB = "my_db";

//  Подключаемся

if (!mysql_connect ($SERVER, $USER, $PASSWORD))

{

echo $HEAD;

echo $CP;

echo $BODY;

echo "<h2>$ERROR</h2>";

echo "</body></html>";

exit;

}

// Выбираем базу данных

mysql_select_db ($DB);

// Выводим заголовок таблицы

echo "<table border=1 width=100% bgcolor=gold>";

echo "<tr><td>Email</td><td>Имя</td><td>Месяц</td>";

echo "<td>Число</td><td>Пол</td></tr>";

// Запрос select * from hbd

$r=mysql_query ("select * from hbd");

// Выводим таблицу

for ($i=0; $i<mysql_num_rows($r); $i++)

{

echo "<tr>";

$f=mysql_fetch_array($r);

echo "<td>$f[email]</td><td>$f[name]</td><td>$f[month]</td>";

echo "<td>$f[day]</td><td>$[sex]</td>";

echo "</tr>";

}

echo "<?table></body></html>";

?>

Функция mysql_list_tables (string $bd [,int connect_id]) , она возвращает идентификатор результата (одна колонка), содержащий имена всех таблиц в указанной базе данных. Второй параметр, как обычно - идентификатор соединения. Пример:

$r = mysql_list_tables("hbd");

while ($row = mysql_fetch_row($r))

{

echo $row."\n";

}

Hosted by uCoz