Назад Содержание Вперед

Сервер баз данных MySQL

SQL- Structured Query Language (язык структурированных запросов) является стандартом для доступа к системам управления реляционными базами данных. SQL используется для сохранения, извлечения данных практически во всех базах данных - MySQL, Oracle, Sybase, msql и пр.

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

Прежде всего отметим, что MySQL не чувствителен к регистру.

Для создания базы данных dbase_name достаточно в командной строке MySQL ввести

mysql> create database dbase_name;
например, после
mysql> create database phone;
результатом будет сообщение примерно такого содержания
Query OK, 1 row affected (0.03 sec)
MySQL поддерживает сложную систему привилегий - то есть обеспечения прав определенного пользователя выполнять действия над объектом.

Установка привилегий проводится с помощью команды GRANT

Синтаксис 
GRANT privileges [columns]
    ON item
    TO user_name [IDENTIFIED BY 'password']
    [WITH GRANT OPTION]
Разделителем списка привилегий и перечня столбцов с привилегиями является запятая. Символ * устанавливает список привилегий для всех баз. Опция WITH GRANT OPTION дает право передавать пользователю свои привилегии. В MySQL существует три основных типа привилегий - для пользователей, для администратора и специальные привилегии.

Привилегии пользователя представляют собой набор команд MySQL с правами на их выполнение.

ПривилегияОбласть примененияОписание
ALTERтаблицыРазрешается изменять структуру таблиц, переименовывая, изменяя тип и добавляя столбцы
CREATEбазы данных, таблицыРазрешается создавать новые базы данных или таблицы
DELETEтаблицыРазрешается удалять существующие строки
DROPбазы данных, таблицыРазрешается удалять новые базы данных или таблицы
INDEXтаблицыРазрешается создавать и удалять индексы
INSERTтаблицы, столбцыРазрешается вставлять новые строки в таблицы
SELECTтаблицы, столбцыРазрешается выбирать строки в таблицах
UPDATEтаблицы, столбцыРазрешается изменять значения в строках

Привилегии администратора

ПривилегияОписание
FILEРазрешается помещать в таблицы данные из файлов и наоборот
PROCESSРазрешается просматривать и удалять процессы на сервере
SHUTDOWNРазрешается останавливать сервер MySQL
RELOADРазрешено изменять таблицы привилегий, подавлять привилегии.

Специальные привилегии

ПривилегияОписание
ALLРазрешено все
USAGEЗапрещено все

Команда REVOKE имеет аналогичный синтаксис, что и GRANT и является его противоположностью. Приведем пример предоставления прав администратора

mysql> grant all
     -> on *
     -> to admin identified by 'mybase'
     -> with grant option;
Пример предоставления ограниченных прав пользователю
mysql> grant select,insert,update,delete
     -> on mybase.*
     -> to client identified by 'mypassword';
Описанный перечень привилегий является наиболее используемым.

Для определения базы данной, с которой требуется работать, нужно набрать строку

mysql> use mybase;
Создать таблицу базы данных можно используя оператор
CREATE TABLE table_name(columns)
При этом за каждым именем столбца должен следовать тип данных этого столбца и, при необходимости, спецификатор.

NOT NULL указывает, что все строки таблицы должны быть заполнены. В противном слечае, то есть если NULL, то строки могут быть не заполнены.

AUTO_INCREMENT используется в числовых столбцах. При вставке новой строки генерирует уникальное значение идентификатора на единицу больше максимального существующего.

PRIMARY KEY указывает на столбец с первичных ключом. Этот столбец индексируется автоматически.

UNSIGNED описывает поле целочисленного типа с неотрицательными данными.

Пример создания таблиц базы Phone

mysql.exe < phone.sql
где файл phone.sql имеет вид
connect phone;
CREATE TABLE Clients (
        PhoneNumber VARCHAR(7) NOT NULL PRIMARY KEY,
    FirstName VARCHAR(15),  
    SecondName VARCHAR(15), 
    LastName VARCHAR(15) 
);
CREATE TABLE ConnectClients (
        PhoneNumber VARCHAR(7) NOT NULL,
    DateConnect DATE NOT NULL,  
    TimeConnect INT UNSIGNED, 
    Tariff FLOAT(5,2) 
);
Для того, чтобы просмотреть таблицы базы данных достаточно набрать
mysql> use phone;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_phone |
+-----------------+
| clients         |
| connectclients  |
+-----------------+
2 rows in set (0.00 sec)
Просмотр структуры таблицы можно реализовать с помощью оператора DESCRIBE
mysql> describe clients;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| PhoneNumber | varchar(7)  |      | PRI |         |       |
| FirstName   | varchar(15) | YES  |     | NULL    |       |
| SecondName  | varchar(15) | YES  |     | NULL    |       |
| LastName    | varchar(15) | YES  |     | NULL    |       |
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

Работа с данными

Для занесения строк с данными в базу данных служит оператор INSERT.
Синтаксис 
INSERT [INTO] table [(column_1,column_2,...)]
       VALUES (value_1,value_2,...)
 
Пример пополнения данных в таблицу Clients в столбцы PhoneNumber,FirstName,LastName
insert into Clients (PhoneNumber,FirstName,LastName) values
( "1-00-01", "Иван","Иванов"
);
Эту же операцию можно выполнить используя следующий синтаксис
insert into Clients 
set  
PhoneNumber="1-01-00",
FirstName="Петр",
LastName="Иваненко";
С целью дальнейшей работы создадим таблицу соединений
connect phone;
insert into ConnectClients 
set  
PhoneNumber="1-00-01",
DateConnect="2003-01-01",
TimeConnect=15,
Tariff=5.25;
insert into ConnectClients 
set  
PhoneNumber="1-01-00",
DateConnect="2003-01-15",
TimeConnect=20,
Tariff=15.00;
insert into ConnectClients 
set  
PhoneNumber="1-00-01",
DateConnect="2003-01-01",
TimeConnect=12,
Tariff=15.00;
insert into ConnectClients 
set  
PhoneNumber="1-00-01",
DateConnect="2003-08-10",
TimeConnect=2,
Tariff=15.00;
insert into ConnectClients 
set  
PhoneNumber="1-01-00",
DateConnect="2003-04-08",
TimeConnect=12,
Tariff=5.25;
Для извлечения данных служит оператор SELECT.
Синтаксис 
SELECT items
FROM tables
     [WHERE condition]
     [GROUP BY group_type]
     [HAVING where_definition]
     [ORDER BY order_type]
     [LIMIT limit_type]
Прежде всего заметим, что поиск и извлечение данных без дополнительных опций позволяет просмотреть как всю таблицу целиком, так и каждый столбец отдельно.

Пример просмотра полей PhoneNumber и LastName таблицы Clients

mysql> use phone;
Database changed
mysql> select phonenumber,lastname
    -> from clients;
+-------------+----------+
| phonenumber | lastname |
+-------------+----------+
| 1-00-01     | Иванов   |
| 1-01-00     | Иваненко |
+-------------+----------+
Для просмотра всей таблицы достаточно записать
mysql> select *
    -> from clients;
+-------------+-----------+------------+----------+
| PhoneNumber | FirstName | SecondName | LastName |
+-------------+-----------+------------+----------+
| 1-00-01     | Иван      | NULL       | Иванов   |
| 1-01-00     | Петр      | NULL       | Иваненко |
+-------------+-----------+------------+----------+
Конструкция WHERE позволяет проводить выборку из базы по определенным условиям

ОператорОписание
=,>,>=,<,<=,<> или !=Проверка условия сравнения
IS NOT NULL, IS NULLСравнение с пустым полем
BETWEENСравнение с диапазоном
IN, NOT INПроверка на содержание в множестве
LIKE, NOT LIKEПроверка на соответствие образцу (шаблону)
REGEXPПроверка на соответствие регулярному выражению в стиле POSIX.

При использовании соответствия LIKE образец может состоять из обычного текста со знаками процента (%) для указания совпадения с произвольным числом символов и символом подчеркивания (_) для указания совпадения с одним символом.

В случае использования нескольких критериев одновременно можно использовать операции AND или OR.

Пример

mysql> select * from clients where LastName like "Иван%" and PhoneNumber like "1-00-__";
+-------------+-----------+------------+----------+
| PhoneNumber | FirstName | SecondName | LastName |
+-------------+-----------+------------+----------+
| 1-00-01     | Иван      | NULL       | Иванов   |
+-------------+-----------+------------+----------+
Достаточно часто возникает необходимость провести выборку информации из нескольких таблиц. В этом случае выполнить объединение этих таблиц с сохранением отношений между ними.

Пример простого объединения двух таблиц.

mysql> select Clients.PhoneNumber, Clients.LastName, ConnectClients.DateConnect,ConnectClients.TimeC
onnect
    -> from ConnectClients, Clients
    -> where Clients.PhoneNumber=ConnectClients.PhoneNumber and Clients.LastName like "Иван%" and Co
nnectClients.TimeConnect>10;
+-------------+----------+-------------+-------------+
| PhoneNumber | LastName | DateConnect | TimeConnect |
+-------------+----------+-------------+-------------+
| 1-00-01     | Иванов   | 2003-01-01  |          15 |
| 1-00-01     | Иванов   | 2003-01-01  |          12 |
| 1-01-00     | Иваненко | 2003-01-15  |          20 |
| 1-01-00     | Иваненко | 2003-04-08  |          12 |
+-------------+----------+-------------+-------------+
В результате из таблиц Clients и ConnectClients мы извлекаем информацию состоящую из номеров телефонов, даты и времени соединения всех, чья фамилия начинается с "Иван" и время соединения больше чем 10.

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

ФункцияОписание
AVGСреднее значение значений столбца
COUNTЧисло ненулевых значений столбца. Если перед названием столбца поставить DISTING, то возвращает число конкретных значений в столбце, если указать COUNT(*) то подсчет количества столбцов будет проводиться независимо от значений.
MINминимальное значение в столбце
MAXмаксимальное значение в столбце
SUMсумма значений в столбце

Пример.

mysql> use phone;
Database changed
mysql> select avg(TimeConnect)
    -> from connectClients;
+------------------+
| avg(TimeConnect) |
+------------------+
|          12.2000 |
+------------------+
Чтобы получить подробную информацию можно использовать выборку по группе - GROUP BY.
mysql> use phone;
Database changed
mysql> select PhoneNumber,sum(TimeConnect)
    -> from connectClients
    -> group by PhoneNumber;
+-------------+------------------+
| PhoneNumber | sum(TimeConnect) |
+-------------+------------------+
| 1-00-01     |               29 |
| 1-01-00     |               32 |
+-------------+------------------+
2 rows in set (0.03 sec)
В данном примере для каждого телефонного номера выбрана сумма времени подключения.

При использовании функций агрегирования и функции группирования можно использовать выбор по условию. Для этой цели используется оператор HAVING. Синтаксис оператора HAVING похож на WHERE, но применяется к группам. Например, выберем все номера телефонов, суммарное время подключения которых больше 30.

mysql> use phone;
Database changed
mysql> select PhoneNumber,sum(TimeConnect)
    -> from connectClients
    -> group by PhoneNumber
    -> having sum(TimeConnect)>30;
+-------------+------------------+
| PhoneNumber | sum(TimeConnect) |
+-------------+------------------+
| 1-01-00     |               32 |
+-------------+------------------+
1 row in set (0.01 sec)
В случае, если область вывода ограничена, то необходимо указывать количество строк, выбираемых из базы. Для этого используется оператор LIMIT. Этот оператор имеет два параметра - номер строки, с которой начинается вывод и количество выводимых строк. Заметим, что нумерация начинается с нуля. Например, если нужно вывести из списка всех клиентов только тех, которые идут под номерами 3 и 4, то это можно реализовать следующим образом.
select Clients
for LastName
Limit 3,4;
В случае, если извлеченные из таблицы строки выводились в определенном порядке, следует использовать оператор ORDER BY в конструкции SELECT.
mysql> use phone;
Database changed
mysql> select LastName, FirstName
    -> from Clients
    -> order by FirstName;
+----------+-----------+
| LastName | FirstName |
+----------+-----------+
| Иванов   | Иван      |
| Иваненко | Петр      |
+----------+-----------+
2 rows in set (0.00 sec)
Для сортировки в обратном порядке нужно к строке с order дописать ключевое слово ASC (от ascending).

Время от времени данные необходимо обновлять. Причиной может быть изменение тарифов, цен и пр. Для обновления данных используется оператор UPDATE.

Синтаксис 
UPDATE tablename
    SET column1=value1,column2=value2,...
    [WHERE condition]
    [LIMIT number]
Здесь в таблице с именем tablename указанный столбец column заменяется значением value. Запись WHERE UPDATE позволяет проводить обновления для определенных строк, а LIMIT указывает количество строк выбранных для обновления.

Например, увеличение тарифов на 10% можно записать следующим образом

mysql> use phone;
Database changed
mysql> update ConnectClients
    -> set tariff=tariff*1.1;
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5  Changed: 5  Warnings: 0
Естественно, обновление базы не есть единственной формой ее изменения. Во время работы может появиться необходимость и в изменении структуры самой таблицы. С этой целью используется оператор ALTER TABLE. Приведем перечень наиболее часто используемых возможностей этого оператора.

СинтаксисОписание
ADD[COLUMN]column_name [FIRST | AFTER column]Добавить новый столбец в указанное место. Если место не указано, то добавляется в конец.
ADD PRIMARY KEY(column,...)Сделать указанный столбец (столбцы) первичных ключом таблицы.
ADD UNIQUE[index](column,...)Добавить уникальный индекс в указанный столбец (столбцы).
CHANGE [COLUMN] column new_descripsionИзменить столбец column так чтобы он получил новое описание new_descripsion (включая название).
MODIFY [COLUMN] column new_descripsionТо же, но без возможности изменить имя.
DROP [COLUMN] column Удалить столбец.
DROP INDEX index Удалить индекс
RENAME[AS] new_table_nameПереименовать таблицу.

Пример. Если поле для фамилии клиента не достаточно велико, его можно расширить, используя следующую запись.

mysql> use phone;
Database changed
mysql> alter table Clients
    -> modify LastName char(25);
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

Работа PHP с базами данных MySQL

Ранее были рассмотрены SQL запросы применительно к серверу баз данных MySQL. Структура запросов PHP к базам MySQL имеет несколько иной вид. При получении запроса в виде строки введенной клиентом, прежде всего следует убрать лишние пробелы (то есть использовать trim($ClientQuery)). Следующим этапом является проверка корректности запроса.
if (!$ClientQuery){
print "Повторите запрос";
exit;
}
Следующим этапом является подключение к серверу MySQL
@ $Db=mysql_pconnect($hostname,$username,$password); 
Если не указывать эти параметры, то функция использует значения принятые по умолчанию - localhost вместо URL-адреса узла, имя пользователя, под которым запущен PHP и пустая строка пароля. В случае удачного соединения функция возвращает идентификатор связи с базой данных. При завершении скрипта связь с базой разрывается. Экстренное завершение соединения реализует функция mysql_close() Для того, чтобы связь была постоянной используется конструкция
@ $Db=mysql_connect($hostname,$username,$password);
Аналогом SQL запроса на соединение с конкретной базой phone
use phone;
является функция
mysql_select_db("phone");
При проведении запроса базы данных MySQL из PHP в отличие от запроса в среде MySQL, точка с запятой не требуется.
Пример запроса
$ClientQuery= "select * from Clients where Clients.LastName like 'Иван%'";
теперь выполним запрос
$result=mysql_query($ClientQuery);
Можно реализовать запрос функцией mysql_db_query(), имеющей синтаксис
mysql_db_query(NameDataBase,StringQuery,[int DataBaseConnection])
Эта функция соединяет возможности функций mysql_select() и mysql_query().

Для определения числа строк возвращаемых запросом используется функция mysql_numrows().
Пример использования

for ($i=0;$i < mysql_numrows($result);i++){
//обработка запроса
}
Заметим, что на каждом шаге выполнения цикла вызывается функция mysql_fetch_array(), вызывающая каждую строку из списка результатов в виде ассоциированного массива с ключом как именем атрибута и значением как соответствующим значением массива.
Пример.
$InfoClient=mysql_fetch_array($result);
print "Телефон: ";
print $InfoClient["PhoneNumber"];
Можно получить доступ к требуемой записи используя функцию mysql_result(). При этом нужно указать номер строки (начиная от нуля) и название поля, например,
$InfoClient=mysql_result($result, $i, "PhoneNumber");

Рассмотрим пример обработки данных, полученных из формы html. Прежде всего создадим базу данных products

mysql.exe CREATE database  products
Далее создадим таблицу с тем же названием.
mysql.exe <products.txt
Первое поле будет содержать имя клиента, второе - адрес его электронной почты и последнее вид товара выбранного клиентом.
Файл products.txt
connect products;
CREATE TABLE clients (
    name VARCHAR(25), 
    email VARCHAR(25), 
    choise VARCHAR(8)
);

Создадим форму запроса -файл shop.html

<HTML><HEAD><TITLE>Запрос</TITLE><BODY><CENTER>
<h3>Информация о наших товарах</h3><P>
<TABLE WIDTH = 400><TR><TD align = right><FORM ACTION="email.php" METHOD="POST">
Ваша фамилия и имя:
<INPUT TYPE="text" NAME="name" SIZE="20" MAXLENGTH="30"><P>Ваш email:
<INPUT TYPE="text" NAME="email" SIZE="20" MAXLENGTH="30"><P>У нас можно приобрести:
<SELECT NAME="preference" ><OPTION value ="Стулья">Стулья 
<OPTION value = "Рога">Рога
<OPTION value = "Копыта">Копыта
</SELECT><P>
<INPUT TYPE="submit"  VALUE="Отправить запрос!">
</FORM></TD></TR></TABLE></CENTER></BODY></HTML>

Обработку запроса будем проводить в файле email.php

<?
$name=$HTTP_POST_VARS["name"];
$email=$HTTP_POST_VARS["email"]; 
$preference=$HTTP_POST_VARS["preference"];
// Переменные 
$hostname = "localhost";
$username = "";
$password = "";
$dbName = "products";
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* создать соединение */
MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db("$dbName") or die("Не могу выбрать базу данных "); 
PRINT "<CENTER>";
PRINT "<h3>ООО Рога и копыта </h3>  приветствует Вас, $name. ";
PRINT "<p>";
PRINT "Вас интересуют $preference. <p> Подробную информацию мы пошлем вам на  email:<i> $email.</i>";
/* Вставить информацию о клиенте в таблицу */
$query = "INSERT INTO $userstable VALUES('$name','$email', '$preference')";
$result = MYSQL_QUERY($query);
PRINT "<p><i>Информация о вас занесена в базу данных.</i>";
PRINT "</CENTER>";
/* Закрыть соединение */
MYSQL_CLOSE();
?>

Файл просмотра статистики info.html

<HTML><HEAD><TITLE>Запрос информации</TITLE>
<BODY><CENTER><h3>Информация о наших клиентах</h3><P>
<TABLE WIDTH = 400><TR><TD align = right><FORM ACTION="stat.php" METHOD="POST">
<P>Меня интересуют клиенты выбравшие:
<SELECT NAME="preference" ><OPTION value ="Стулья">Стулья 
<OPTION value = "Рога">Рога
<OPTION value = "Копыта">Копыта
</SELECT><P>
<INPUT TYPE="submit"  VALUE="Отправить запрос!">
</FORM></TD></TR></TABLE></CENTER></BODY></HTML>

Файл обработки информации stat.php

<?/* Скрипт показывает клиентов*/
$preference=$HTTP_POST_VARS["preference"];
$hostname = "localhost";
$username = "";
$password = "";
$dbName = "products";
/* Таблица MySQL, в которой хранятся данные */
$userstable = "clients";
/* создать соединение */
$link=MYSQL_CONNECT($hostname,$username,$password) OR DIE("Не могу создать соединение ");
@mysql_select_db($dbName,$link) or die("Не могу выбрать базу данных "); 
/* Выбрать всех клиентов  */
$query = "SELECT * FROM $userstable WHERE choise = '$preference'";
$result = MYSQL_QUERY($query);
/* Количество клиентов */
$number = MYSQL_NUMROWS($result);
/* Напечатать список клиентов*/
$i = 0;
IF ($number == 0) {
PRINT "<CENTER><P>Желающих приобрести $preference нет</CENTER>";
} ELSEIF ($number > 0) 
{
PRINT "<CENTER><P>Количество клиентов желающих приобрести $preference : $number<BR><BR>";
WHILE ($i < $number){
$name = mysql_result($result,$i,"name");
$email = mysql_result($result,$i,"email");
PRINT "Клиент $name желает приобрести $preference.<BR>";
PRINT "Его Email: $email.";
PRINT "<BR><BR>";
$i++;
}
PRINT "</CENTER>";
}
?>

Функции MySQL

Эти функции обеспечивают доступ к серверам баз данных MySQL. Больше информации о MySQL можно найти на сайте http://www.mysql.com/.

mysql_affected_rows

mysql_affected_rows -- возвращает количество столбцов, использованных предыдущими MySQL операциями

Описание
int mysql_affected_rows(int [link_identifier] );
mysql_affected_rows() возвращает количество столбцов, использованных запросами INSERT, UPDATE или DELETE на сервере, связываемом с определенным идентификатором связи(link_identifier). Если идентификатор связи не определен, используется последняя открытая связь.
Если последний запрос был запрос DELETE без условия WHERE, ВСЕ записи будут удалены из таблицы, но эта функция возвратит нуль.
Эта команда не действует при запросе SELECT, она действует только при запросах, изменяющих записи. Чтобы получить количество колонок возвращенных на запрос SELECT, используйте mysql_num_rows().

mysql_close

mysql_close -- закрывает MySQL соединение
Описание
int mysql_close(int [link_identifier] );

Возвращает: true при успешном завершении, false при ошибке
mysql_close() закрывает связь с базой данных MySQL, ассоциированной с определенным идентификатором связи(link identifier. Если идентификатор связи не определен, используется последняя открытая связь.
Имейте в виду, что это не всегда необходимо, так как непостоянные открытые связи автоматически закрываются в конце выполнения сценария.
mysql_close() не закроет устойчивые связи сгенерированные функцией mysql_pconnect().

mysql_connect

mysql_connect -- открывает соединение с MySQL сервером
Описание
int mysql_connect(string [hostname] [:port] , string [username] , string [password] );

Возвращает: Правильный идентификатор связи MySQL при успешном выполнении, или false при ошибке.
mysql_connect() устанавливает соединение с MySQL сервером. Все аргументы дополнительны(опциональны), и если они пропущены, то устанавливаются по умолчанию -('localhost', имя пользователя, который владеет процессом, пустой пароль). Строка "имя сервера"("hostname") также может содержать номер порта( подобно "hostname:port").
В случае, если будет сделан второй вызов mysql_connect() с теми же аргументами, никакая новая связь не установится - вместо этого, будет возвращен идентификатор связи уже открытой связи.
Как только выполнение сценария закончится, связь с сервером закроется, если оно не было явно закрыто более ранний вызовом mysql_close().

mysql_create_db

mysql_create_db -- Создает базу данных MySQL
Описание

int mysql_create_db(string database name, int [link_identifier] );

mysql_create_db() пытается создавать новую базу данных на сервере связанном с определенным идентификатором связи.
Описание
int mysql_data_seek(int result_identifier, int row_number);

Возвращает: true при успешном выполнении , false при ошибке.
mysql_data_seek() перемещает внутренний указатель столбца в MySQL запросе связанного с определенным идентификатором результата чтобы указать на определенный номер столбца. Последующий вызов mysql_fetch_row() должно возвратить этот столбец.

mysql_db_query

mysql_db_query -- Посылает MySQL запрос
Описание
int mysql_db_query(string database, string query, int [link_identifier] );

Возвращает: Правильный идентификатор результата MySQL в результате запроса, или false при ошибке .
mysql_db_query() выбирает базу данных и выполняет запрос на нее. Если дополнительный идентификатор связи не определен, функция попытается найти открытую связь с MySQL сервером и если такая связь не обнаружена, то она попытается создать ее, как если бы функция mysql_connect() была вызвана без аргументов.
Описание
int mysql_drop_db(string database_name, int [link_identifier] );

Возвращает: true при успешном выполнении , false при неудачном завершении.
mysql_drop_db() пытается удалить целую базу данных с сервера, связанного с определенным идентификатором связи.

mysql_errno

mysql_errno -- Возвращает номер сообщения об ошибке предыдущей операции MySQL
Описание
int mysql_errno(int [link_identifier] );

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

<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>

mysql_error

mysql_error -- Возвращает текст сообщения об ошибке предыдущей операции MySQL
Описание
string mysql_error(int [link_identifier] );

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

<?php
mysql_connect("marliesle");
echo mysql_errno().": ".mysql_error()."<BR>";
mysql_select_db("nonexistentdb");
echo mysql_errno().": ".mysql_error()."<BR>";
$conn = mysql_query("SELECT * FROM nonexistenttable");
echo mysql_errno().": ".mysql_error()."<BR>";
?>

mysql_fetch_array

mysql_fetch_array -- Выбрать результат как ассоциативный массив
Описание
array mysql_fetch_array(int result);

Возвращает результат строки запроса как массив, или false при отсутствии результата.
mysql_fetch_array() является расширенной версией функции mysql_fetch_row(). Кроме того, что она сохраняет данные в пронумерованных элементах, результатного массива, она также сохраняет ассоциативную связь, используя имена полей как ключи.
Если два или более столбцов имеют одинаковые имена, то связку ключ/значение получает последний из них. Чтобы получить доступ к другому столбцу(-цам) с таким же именем, вы должны использовать индексы или задать псевдонимы(alias) для этих столбцов.

select t1.f1 as foo t2.f1 as bar from t1, t2

Важно заметить, что использование mysql_fetch_array() НЕСУЩЕСТВЕННО медленнее, чем использование mysql_fetch_row(), пока это обеспечивает необходимую задачу.

Пример. mysql fetch array
<?php 
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_array($result)) {
    echo $row["user_id"];
    echo $row["fullname"];
}
mysql_free_result($result);
?>

mysql_fetch_field

mysql_fetch_field -- Получает информацию о столбце из результата и возвращает ее как объект.
Описание
object mysql_fetch_field(int result, int [field_offset] );

Возвращает объект, содержащий информацию о поле.
mysql_fetch_field() Может быть использована для получения информации о поле в определенном результате запроса. Если параметры поля не указаны, то будет запрошено поле, которое еще не было запрошено функцией mysql_fetch_field().
Свойствами объекта являются:
  • name - имя столбца
  • table - имя таблицы, содержащей столбец
  • max_length - максимальная длинна столбца
  • not_null -1, если столбец не может принимать нулевые значения
  • primary_key - 1, если столбец является первичным ключом.
  • unique_key - 1 если столбец является уникальным ключом
  • multiple_key - 1 если столбец является не-уникальным ключом
  • numeric - 1 если столбец числовой
  • blob - 1 это столбец является BLOB
  • type - тип столбца
  • unsigned - 1 если столбец не назван
  • zerofill - 1 если столбец заполнен нулем

mysql_fetch_lengths

mysql_fetch_lengths -- Получает максимальный размер данных для каждого выходного значения
Описание
array mysql_fetch_lengths(int result);

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

mysql_fetch_object

mysql_fetch_object -- Получает строку результата как объект.
Описание
object mysql_fetch_object(int result);

Возвращает объект с свойствами, который соответствует полученной строке, или false если нет результата.
mysql_fetch_object() подобна mysql_fetch_array(), с одним различием - вместо массива возвращается объект. Это означает, что Вы можете иметь доступ к данным только по именам полей, а не по их параметрам (индексные числа в данном случае являются неверным обращением).
Вообще говоря, эта функция идентична mysql_fetch_array(), такая же быстрая как mysql_fetch_row() (различие незначительное).

Пример. mysql fetch object
<?php 
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_object($result)) {
    echo $row->user_id;
    echo $row->fullname;
}
mysql_free_result($result);
?>

mysql_fetch_row

mysql_fetch_row -- Получите строку результата как пронумерованный массив
Описание
array mysql_fetch_row(int result);

Возвращает: Массив, который соответствует выбранным колонкам, или false если нет результата.
mysql_fetch_row() выбирает столбец данных из результата, и связывает его с определенным идентификатором результата(индексом элемента массива). Запрос возвращается как массив. Каждый столбец результата хранится в элементах массива, пронумерованного с нуля.
Последующий вызов функции mysql_fetch_row() должен возвратить следующую строку, или false если нет больше колонок.

mysql_field_name

mysql_field_name -- Получает имя определенного поля в результате
Описание
string mysql_field_name(int result, int field_index);

mysql_field_name() возвращает имя указанного поля. Аргументами функции являются идентификатор результата и индекс поля, т.е. mysql_field_name($result,2);
Возвратит имя второй области в результат, связанный с идентификатором результата($result).

mysql_field_seek

mysql_field_seek -- Устанавливает указатель запроса в определенное поле.
Описание
int mysql_field_seek(int result, int field_offset);

Поиск в определенном поле. Если следующий вызов mysql_fetch_field() не содержит указания поля, то должно быть возвращено именно это поле.

mysql_field_table

mysql_field_table -- Получает имя таблицы, в которой находится указанное поле.
Описание
string mysql_field_table(int result, int field_offset);

Получает имя таблицы поля.

mysql_field_type

mysql_field_type -- Получает тип указанного поля в результате
Описание
string mysql_field_type(int result, int field_offset);

mysql_field_type() подобна функции mysql_field_name() . Аргументы идентичны, но возвращается тип поля. Это будет что-то из "int", "real", "string", "blob", или другие типы, которые подробно описываются в документации MySQL.

Пример. mysql field types
<?php 
mysql_connect("localhost:3306");
mysql_select_db("wisconsin");
$result = mysql_query("SELECT * FROM onek");
$fields = mysql_num_fields($result);
$rows   = mysql_num_rows($result);
$i = 0;
$table = mysql_field_table($result, $i);
echo "Your '".$table."' table has ".$fields." fields and ".$rows." records <BR>";
echo "The table has the following fields <BR>"; 
while ($i < $fields) {
    $type  = mysql_field_type  ($result, $i);
    $name  = mysql_field_name  ($result, $i);
    $len   = mysql_field_len   ($result, $i);
    $flags = mysql_field_flags ($result, $i);
    echo $type." ".$name." ".$len." ".$flags."<BR>";
    $i++;
}
mysql_close();
?>

mysql_field_flags

mysql_field_flags -- Получает флаги, связанные с указанным полем в результате
Описание
string mysql_field_flags(int result, int field_offset);

mysql_field_flags() возвращает флаги указанного поля. Флаги передаются как одно слово на флаг, разделенные одним пробелом, так, что Вы можете разделить возвращенную величину используя explode().
Если ваша текущая версия MySQL их поддерживает, могут быть получены следующие флаги : : "not_null", "primary_key", "unique_key", "multiple_key", "blob", "unsigned", "zerofill", "binary", "enum", "auto_increment", "timestamp".

mysql_field_len

mysql_field_len -- Возвращает длину указанного поля
Описание
int mysql_field_len(int result, int field_offset);

mysql_field_len() возвращает длину указанного поля.

mysql_free_result

mysql_free_result -- Освобождает память результата
Описание
int mysql_free_result(int result);

mysql_free_result() должна быть использована только если Вы беспокоитесь об использовании слишком большого объема памяти, во время работы вашего скрипта. Вся используемая результатом память для определенного идентификатора результата автоматически будет освобождена.

mysql_insert_id

mysql_insert_id -- Получает id сгенерированный предыдущим выполнением SQL-запроса INSERT
Описание
int mysql_insert_id(int [link_identifier] );

mysql_insert_id() возвращает ID сгенерированнуые для поля с автоинкрементом(AUTO_INCREMENTED). Эта функция не использует аргументов. Она возвратит автоматически сгенерированный номер ID возвращенный последним запросом INSERT.

mysql_list_fields

mysql_list_fields -- Показывает список полей MySQL в результате запроса
Описание
int mysql_list_fields(string database_name, string table_name, int [link_identifier] );

mysql_list_fields() извлекает информацию о заданной tablename таблице. Аргументы - имя базы данных и имя таблицы. После выполнения возвращается указатель результата, который может использоваться функциями mysql_field_flags(), mysql_field_len(), mysql_field_name(), и mysql_field_type().
Идентификатор результата является положительным целым. Функция возвращает -1 если происходит ошибка. Строка описсания ошибки будет помещена в переменную $phperrmsg, и если функция не была вызвана как @mysql() то затем также будет выведено это описание ошибки.

mysql_list_dbs

mysql_list_dbs -- Показывает список доступных Баз Данных на сервере
Описание
int mysql_list_dbs(int [link_identifier] );

mysql_list_dbs() возвратит указатель результата, содержащий базы данных доступные текущему процессу mysql. Используйте функцию mysql_tablename(), чтобы просмотреть этот указатель результата.
Описание
int mysql_list_tables(string database, int [link_identifier] );

mysql_list_tables() берет имя базы данных и указатель результата очень подобно функции mysql_db_query(). Функция mysql_tablename() должна использоваться, чтобы извлечь фактические имена таблиц с указателя результата.

mysql_num_fields

mysql_num_fields -- Получает количество полей в результате.
Описание
int mysql_num_fields(int result);

mysql_num_fields() получает количество полей в установленном результате.

name=mysql_num_rows

mysql_num_rows

mysql_num_rows -- Получает количество столбцов в результате
Описание:

int mysql_num_rows(int result);

mysql_num_rows() получает количество столбцов в установленном результате

mysql_pconnect

mysql_pconnect -- Открывает устойчивое соединение с MySQL-сервером
Описание
int mysql_pconnect(string [hostname] [:port] , string [username] , string [password] );

Возвращает: Правильный MySQL идентификатор устойчивой связи при успешном выполнении , или false при ошибке.
mysql_pconnect() действует очень похоже на mysql_connect() с двумя важными различиями.
Во-первых, при соединении, функция должна сначала попытаться найти (устойчивую) связь, которая уже открыта тем же хостом, именем пользователя и паролем. Если она обнаруживается, возвратится ее идентификатор, вместо открытия нового соединения.
Во-вторых, соединение с сервером SQL не закроется, когда закончится выполнение сценария. Вместо этого, связь останется открытой для последующего использования (mysql_close() не закроет связи установленные функцией mysql_pconnect()).
Потому этот тип связей назван 'устойчивый'.

mysql_query

mysql_query -- Отправляет SQL-запрос на MySQL
Описание
int mysql_query(string query, int [link_identifier] );

mysql_query() посылает запрос в базу данных, к настоящему времени активную на сервере, который связан с определенным идентификатором связи. Если link_identifier не указан, используется последняя открытая связь. Если связь не открыта, функция пытается установить связь, как если бы была вызвана функция mysql_connect() и использует ее.
Эта функция возвращает TRUE или FALSE чтобы показать успешность выполнения запросов UPDATE, INSERT, и DELETE. При запросе SELECT она возвращает новый идентификатор результата. Ресурсы, использованные запросом затем могут быть освобождены вызовом функции mysql_free_result().

mysql_result

mysql_result -- Получает данные результата
Описание
int mysql_result(int result, int row, mixed field);

mysql_result() возвращает содержимое одной ячейки из установленного результата MySQL. Аргументом поля может быть номер или имя поля, или параметр типа имя_таблицы-точка-имя_поля(fieldname.tablename). Если имя столбца заменено псевдонимом('select foo as bar from...'), используйте псевдоним вместо имени столбца.
Работая с больших результатами, Вы должны предусматривать использование одной из функций, которые выбирают целую строку(указано ниже) За счет того, что эти функции возвращают содержимое большого числа ячеек за один вызов функции, они ЗНАЧИТЕЛЬНО более быстрые чем mysql_result(). Также, имейте в виду, что определение аргумента поля числовым параметром, значительно более быстрое чем определение имени поля(fieldname) или использование аргумента tablename.fieldname.
Вызов mysql_result() не должен смешиваться с вызовами других функций, которые имеют дело с установленным результатом.
Рекомендуемые быстродействующие альтернативы: mysql_fetch_row(), mysql_fetch_array(), и mysql_fetch_object().

mysql_select_db

mysql_select_db -- Выбирает Базу Данных MySQL
Описание
int mysql_select_db(string database_name, int [link_identifier] );

Возвращает: true при успешном выполнении , false при ошибке
mysql_select_db() устанавливает текущую активную базу данных в сервере, которая связывается с определенным идентификатором связи. Если не определен идентификатор связи, принимается последняя открытая связь. Если связь не открыта, функция попытается установить связь, как если бы была вызвана функция mysql_connect().
Каждый последующий вызов mysql_query() будет произведен в активной базе данных.

mysql_tablename

mysql_tablename -- Получает имя таблицы, содержащей указанное поле.
Описание
string mysql_tablename(int result, int i);

mysql_tablename() берет указатель результата возвращенный функцией mysql_list_tables() а также целочисленный индекс и возвращает имя таблицы. Функция mysql_num_rows() может использоваться для того, чтобы определить количество таблиц на данном указателе результата.

Пример. mysql_tablename() example
<?php 
mysql_connect ("localhost:3306");
$result = mysql_listtables ("wisconsin");
$i = 0;
while ($i < mysql_num_rows ($result)) {
    $tb_names[$i] = mysql_tablename ($result, $i);
    echo $tb_names[$i] . "<BR>";
    $i++;
}
?>


Назад Содержание Вперед