люди, из следующего кода
int a = mysql_query(conn,"INSERT into data VALUES (NULL,'tes','aja'));
как я могу убедиться, что mysql_query делает предполагаемую вещь, потому что я пробовал неправильный sql-запрос и становится таким же возвращаемым значением
из функции mysql_query, которая из файла mysql.h:
int STDCALL mysql_query(MYSQL *mysql, const char *q);
Есть ли способ проверить правильность и правильность запроса строки запроса?
В соответствии с справочной документацией MySQL для mysql_query это должно возвращать ноль при успешном завершении и отличное от нуля при ошибке. Вы уверены, что оно возвращает значение 0 для недопустимого запроса?
Я был удивлен, что база данных MySQL, которую я должен был использовать, не возвращала ошибку в "неправильном запросе". (База данных MySQL не входит в мое администрирование). Вы не пишете, какая именно проблема у вас есть с вашим запросом; в чем проблема. Я полагаю, что моя проблема может быть похожа на вашу проблему.
(Пример таблицы упрощен.)
Моя таблица 'T' с cols 'A' varchar [10] не null, 'B' varchar [10]
int a = mysql_query(conn,"INSERT INTO T (B) VALUE ('data')");
Проблема в том, что результат ОК, сообщение об ошибке пустое и присутствует только одно предупреждение.
Решение состоит в проверке не только ошибок, но и предупреждений.
if ( mysql_errno( conn ) || mysql_warning_count( conn ) )
result = 1; //error
else
result = 0; //OK
Если вам нужно отображать предупреждения/ошибки, есть мой простой пример кода:
static void display_warnings( MYSQL *conn )
{
MYSQL_RES *sql_result;
MYSQL_ROW row;
if ( ( conn == NULL ) || mysql_query( conn, "SHOW WARNINGS" ) )
{
printf( "Can not display list of errors/warnings!\n" );
return;
}
sql_result = mysql_store_result( conn );
if ( ( sql_result == NULL ) || ( sql_result->row_count == 0 ) )
{
printf( "Can not display list of errors/warnings!\n" );
if ( sql_result )
mysql_free_result( sql_result );
return;
}
row = mysql_fetch_row( sql_result );
if ( row == NULL )
{
printf( "Can not display list of errors/warnings!\n" );
mysql_free_result( sql_result );
return;
}
do
{
// Format: "message [Type: number]"
printf( "%s [%s: %s]\n", row[2], row[0], row[1] );
row = mysql_fetch_row( sql_result );
} while ( row );
mysql_free_result( sql_result );
}
Мне нужно обработать то, что все данные должны быть правильными и ни одного не хватает. Отсутствующие данные (согласно определению таблицы) неприемлемы; обрезание данных ( "ABC12345678" изменено на "ABC1234567" ) также неприемлемо. Обе эти проблемы обрабатываются только как предупреждение. Поэтому я обрабатываю все предупреждения как ошибки.