что такое возвращаемое значение ошибки mysql_query в C? - PullRequest
0 голосов
/ 10 февраля 2011

ребята, из следующего кода

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);

есть ли способ проверить, что строка запроса верна и запрашивается правильно?

Ответы [ 2 ]

0 голосов
/ 28 октября 2013

Я был удивлен, что база данных MySQL, которую я использовал, не возвращала ошибку при «неправильном запросе». (База данных MySQL не находится в моей администрации) Вы не пишете, какая именно проблема у вас с вашим запросом;в чем проблема.Я полагаю, что моя проблема может быть похожа на вашу проблему.

(Таблица примеров упрощена.)

Моя таблица 'T' с cols 'A' varchar [10]не ноль, '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») также недопустимо.Обе эти проблемы рассматриваются только как предупреждение.Поэтому я воспринимаю все предупреждения как ошибки.

0 голосов
/ 10 февраля 2011

Согласно справочной документации MySQL для mysql_query это должно возвращать ноль в случае успеха и ненулевое значение в случае сбоя. Вы уверены, что он возвращает 0 для неверного запроса?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...