MSQLCAPI
API для языка С в mSQL версии 2 не имеет принципиальных отличий от реализации в mSQL 1. Однако были добавлены некоторые новые функции, и было внесено несколько изменений в уже существующие функции. Если функция может быть использована только в mSQL 2, на это обращается особое внимание.
Типы данных
mSQL С API кроме стандартных типов данных языка С использует некоторые свои типы. Они определены в заголовочном файле 'msql.h', который необходимо подключать при компиляции всех программ, использующих библиотеку mSQL.
m_result
Структура, содержащая результаты оператора SELECT (или SHOW). Доступ к результатам запроса следует осуществлять через элемент этой структуры m_row.
m_row
Одна запись из данных, возвращаемых запросом SELECT. Результаты всех типов данных mSQL хранятся в этом типе (как массив символьных строк).
m_field
Структура, содержащая всю информацию, которая касается отдельного поля таблицы. Элементы структуры m_field могут быть проверены напрямую и имеют следующее строение:
char *name
Имя поля.
char *table
Имя таблицы, содержащей поле. Это значение пустое (null), если результирующий набор не относится к настоящей таблице.
int type
Тип поля. Является целым числом, соответствующим типам данных mSQL SQL, определенным в заголовочном файле msql.h.
int length
Длина поля в байтах.
int flags
Ноль или более флагов. Доступ к флагам осуществляется- через следующие макросы:
IS_PRI_KEY(flags)
Возвращает true, если поле является первичным ключом.
IS_NOT_NULL(flags)
Возвращает true, если поле определено как NOT NULL.
msqIConnect
int msqIConnect ( char*host )
Создает подключение к серверу mSQL с указанным именем хоста или IP-адресом. Если в аргументе передать пустое значение, будет создано подключение к серверу mSQL на локальном хосте, с использованием сокетов Unix. Функция возвращает описатель базы данных, применяемый для связи с сервером баз данных. В случае ошибки вернется — 1.
Пример
/* Создать подключение к серверу баз данных на локальном хосте*/
dbh = msqlConnect( (char*)NULL );
if (dbh == -1) {
print " Ошибка при подключении!\n";
exit(1); }
msqISelectDB
int msqISelectDB ( int sock , char*dbName )
Выбирает базу данных для указанного подключения. Базу данных необходимо выбрать до того, как будут посланы любые запросы к серверу баз данных. В случае ошибки возвращается — 1.
Пример
/* Выбрать базу данных "mydatabase" */
result = msqlSelectDB( dbh, "mydatabase" );
if (result == -1) {
print "Ошибка при выборе базы данных! \n";
exit(1); }
msqIQuery
int msqlQuery( int sock , char*query )
Выполняет указанный SQL-запрос. В mSQL 2 в возвращаемом значении содержится количество записей, измененных запросом (или выбранных запросом SELECT). В mSQL 1 при успешном выполнении возвращается ноль. В случае ошибки обе версии возвращают — 1.
Пример
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
msqIStoreResult
m_result *msqlStoreResult()
Сохраняет результат запроса SELECT. Эту функцию вызывают сразу после вызова msqIQuery с запросом SELECT. Результаты запроса сохраняются в структуре m_result. Новые запросы посылаются серверу баз данных только после вызова этой функции. Каждая структура m_result должна быть освобождена с помощью msqlFreeResult по завершении работы с ней.
Пример
m_result *results;
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
IK. 897
/* К данным из этого запроса можно обращаться через'results'. Теперь можно выполнять новые запросы */
msqIFreeResult
void msqIFreeResult ( m_result*result )
Освобождает память, связанную со структурой m_result.
Пример
m_result "results;
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
/* Выполнить работу */
msqIFreeResult(results);
msqIFetchRow
m_row msqIFetchRow ( m_result*result )
Выбирает одну запись из результирующего набора. Данные помещаются в структуру m_row, которая является массивом символьных строк. Каждый успешный вызов функции msqIFetchRow возвращает следующую запись до тех пор, пока не будет достигнут конец набора, тогда будет возвращено нулевое значение.
Пример
m_result *results;
m_row "row;
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
row = msqlFetchRow(results);
printf("Третье поле первой записи в таблице: %s\n", row[2]);
msqlDataSeek
void msqlDataSeek ( m_result* result, int pos )
Устанавливает курсор, указывающий функции msqIFetchRow, .какую строку выбирать при следующей операции. Установив курсор в позицию 0, вы переместите его в начало данных. Установив курсор в позицию после последней записи, вы поместите его в конец данных.
Пример
m_result *results;
m_row Vow;
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
row = msqlFetchRow(results);
/* Вернуться к исходной позиции */ msqlDataSeek(results, 0);
msqINumRows
int msqINumRows ( m_result*result )
Возвращает число строк в результирующем наборе.
Пример
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult(); rows = msqlNumRows(results);
msqIFetchField
m_field "msqIFetchField ( m_result*result )
Возвращает информацию о полях в результирующем наборе. Каждый успешный вызов функции msqIFetchField вернет структуру m_f ield для очередного поля, пока полей больше не останется, и тогда будет возвращено пустое значение.
Пример
m_field *field;
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
field = msqlFetchField(results);
/* 'field' теперь содержит информацию о первом поле
в результирующем наборе */
field = msqlFetchField(results);
/* 'field' теперь содержит информацию о втором поле в том же наборе записей */
msqlFieldSeek
void msqlFieldSeek ( m_result*result , int pos )
Устанавливает курсор, указывающий функции msqlFetchField какое поле выбирать в следующий раз. Установив курсор в позицию после последнего поля, вы, собственно, установите его просто после последнего поля.
Пример
m_result "results; m_field 'field;
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
field = msqlFetchField(results);
/* Вернутся к исходной позиции */
msqlFieldSeek(results, .0);
msqlNumFields
int msqlNumFields ( m_result* result )
Возвращает число полей в результирующем наборе.
Пример
rows_returned = msqlQuery( dbh, "SELECT FROM people" );
results = msqlStoreResult();
fields = msqlNumFields(results);
msqICIose
int msqICIose ( int sock )
Закрывает подключение к серверу баз данных mSQL.
Пример
dbh = msqlConnect( (char')NULL );
/* Do work */
msqlClose(dbh);
msqIListDBs
m_result *msqlListDBs ( int sock )
Возвращает структуру m_result, содержащую имена всех баз данных, доступных на сервере баз данных. Как и все структуры m_result, значение, возвращаемое этой функцией, должно быть освобождено с помощью msqlFreeResult после завершения работы с ним.
Пример
databases = msqlListDBs(dbh);
/* 'databases' содержит теперь имена всех баз данных на сервере*/
msqIListTables
m_result *msqIListTables ( int sock )
Возвращает структуру m_result, содержащую имена всех таблиц текущей базы данных. Как и все структуры m_result, значение, возвращаемое этой функцией, должно быть освобождено с помощью msqlFreeResult после завершения работы с ним.
Пример
tables = msqlListTables(dbh);
/* 'tables' содержит теперь имена всех таблиц текущей базы данных*/
msqIListFields
m_result 'msqIListFields ( int sock , char*tableName )
Возвращает структуру m_result, содержащую имена всех полей в указанной таблице. Как и все структуры m_result, значение, возвращаемое этой функцией, должно быть освобождено с помощью msqlFreeResult после завершения работы с ним.
Пример
fields = msqlListFields(dbh, "people");
/* 'fields' содержит теперь имена всех полей
в таблице'people' */
msqIListlndex
m_result 'msqIListlndex ( int sock , char*tableName , char*index )
Возвращает структуру m_result, содержащую информацию о заданном индексе. Возвращаемый набор данных будет содержать тип индекса (в настоящее время поддерживается только тип 'avl') и содержащиеся в индексе имена полей. Как и все структуры m_result, значение, возвра щаемое этой функцией, должно быть освобождено с помощью msqlFreеResult после завершения работы с ним.
Пример
index = msqll_istIndex(dbh, "people", "idx1");
/* Теперь'index' содержит информацию об индексе 'idx1' в таблице 'people' */