Функции 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 - имя или порядковый номер поля. Например, запрос вернул следующий набор данных:
|
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";
}