Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Начинаем изучать MySQL
<<-[Весь Текст]
Страница: из 157
 <<-
 
state = msqlSelectDB(connection, "db_test"); 
/* опять-таки, -1 указывает на ошибку */ 
if( state == -1 ) 
{ 
printf(msqlErrMsg);
/* закрыть соединение перед выходом */
msqlClose(connection);
return 1; }
state = msqlQuery(connection, "SELECT test_id, test_val FROM test"); 
if( state == -1 ) 
{
printf(msqlErrMsg);
return 1; 
} 
else 
{
printf("Строк: %d\n", state); 
}
/* прежде чем делать новый вызов Query(), 
* необходимо вызвать msqlStoreResult()
*/ 
result = msqlStoreResult();
/* обработать каждую строку результирующего набора */
while( ( row = msqlFetchRow(result)) != NULL ) 
{
printf("id: %s, значение: %s\n",
(row[0] ? row[0] : "NULL"),
(row[1] ? row[1] : "NULL")); 
}
/* освободить ресурсы, использовавшиеся результирующим набором */ 
msqlFreeResult(result); /* закрыть соединение */
msqlClose(connect ion);
printf("Конец работы.\n"); }
Эти программы почти идентичны. Кроме разных имен функций, есть лишь несколько 
заметных отличий. Сильнее всего бросается в глаза различие в соединении с базой 
данных, которое проявляется в двух отношениях:
* В MySQL соединение осуществляется за один шаг, а в mSQL - за два.*
* Для MySQL требуются имя пользователя и пароль, а для mSQL -нет.
Как указывалось ранее в этой книге, MySQL поддерживает сложную схему 
авторизации с именами пользователей и паролями. Напротив, в mSQL применяется 
простая система, использующая ID пользователя процесса, соединяющегося с базой 
данных. Более надежная схема MySQL гораздо привлекательнее в среде 
клиент/сервер, но также и значительно более сложна в администрировании. Для 
разработчиков приложений она означает необходимость передачи в вызове 
mysql_real_connect() имени пользователя и пароля при работе с MySQL помимо 
имени сервера, используемого в mSQL.
Первый аргумент API для установления соединения с MySQL может показаться 
необычным. По сути, это способ отслеживать все вызовы, иначе никак не связанные 
с соединением. Например, если вы пытаетесь установить соединение, и попытка 
неудачна, вам нужно получить сообщение о соответствующей ошибке. Однако функция 
MySQL 
mysql_error() требует задания указателя на действующее соединение с базой 
данных MySQL. Такое соединение обеспечивается изначально созданным нулевым 
соединением. Однако у вас должна быть действующая ссылка на это значение в 
течение всего времени существования вашего приложения - вопрос большой важности 
в более структурированной среде, чем простое приложение вида «соединился, 
сделал запрос, закрылся». Примеры на C++ далее в этой главе подробнее 
рассматривают эту тему.
Два другие различия в API относятся к тому, как производятся обработка ошибок и 
подсчет числа записей в результирующем наборе. API mSQL создает глобальную 
переменную для хранения сообщений об ошибках. Из-за многопоточности MySQL такая 
глобальная переменная не смогла бы действовать в его API. Поэтому в нем 
используется функция mysql_error() для извлечения сообщений об ошибках, 
связанных с последней ошибкой, порожденной указанным соединением.
API для соединения и обработки ошибок - два пункта, в которых MySQL отличается 
от mSQL для обеспечения функциональности, отсутствующей в mSQL. Подсчет числа 
результирующих записей в mSQL делается иным способом для обеспечения лучшего 
интерфейса, нежели предоставляемый MySQL. А именно: при посылке SQL-запроса в 
msqlQuery() возвращается число задействованных строк (или -1 в случае ошибки). 
Таким образом, подсчет измененных строк при обновлении и строк в возвращаемом 
результирующем наборе при запросе используют одну и ту же парадигму. В MySQL же 
приходится использовать различные парадигмы. При запросе на получение данных 
нужно передать результирующий набор функции mysql_nuoi_rows() , чтобы получить 
число строк в результирующем наборе. При обновлении нужно вызвать другую 
функцию API, mysql_affected_rows() . В то время как msqlQuery() возвращает 
число строк, удовлетворивших предложению WHERE при обновлении, 
mysql_affected_rows() сообщает о числе фактически измененных строк. И наконец, 
в mSQL есть метод msqlNumRows() , обеспечивающий тот же интерфейс для подсчета 
результирующего набора, что и в MySQL, но в нем нет аналога для 
mysql_affected_rows() .
 
<<-[Весь Текст]
Страница: из 157
 <<-