Newsgroup: it.comp.os.linux.development
Titolo: [C & Mysql]

Un saluto a tutto il newsgroup,
utilizzo mysql in abbianamento a mysql. Adesso vorrei poter scrivere
semplici applicativi in C.
Ho reperito i file rpm client, server e devel di mysql e installati.
Tutto sembra correttamente installato.
Scrivo il seguente codice di prova:
#include <stdio.h>
#include <mysql.h>
//using namespace std;
#define def_host_name   "localhost"
#define def_user_name   NULL
#define def_password    NULL
#define def_db_name     "test_db"
MYSQL *cnx_init;
MYSQL *cnx_db;
MYSQL_RES *result_set;
MYSQL_ROW  row;
unsigned int ctr;
/* Prototipi di funzioni */
void show_result_set (MYSQL_RES *in_result_set);
int main (int argc, char *argv[])
{
      printf("starting\n");
      cnx_init = mysql_init (NULL);
      if (cnx_init == NULL)
                  { printf("failure in mysql_init\n");
                    printf("Exit code 1\n");
                    exit(1);
                  }
      cnx_db = mysql_real_connect ( cnx_init,
                          def_host_name,
                          def_user_name,
                          def_password,
                          def_db_name,
                          0,
                          NULL,
                          0) ;
  if (cnx_db == NULL) {
                 printf("failure in mysql_real_connect\n");
                 printf("Exit code 2\n");
                 printf("Error %u -- %s\n",
                   mysql_errno (cnx_init),
                   mysql_error (cnx_init));
                  exit(2);
   }
    printf("Databases\n");
    printf("=========\n");
    if (mysql_query (cnx_init, "SHOW DATABASES") != 0)
            printf("Failure in show databases\n");
      else
         {
         result_set = mysql_store_result (cnx_init);
         if (result_set == NULL)
            printf("failure in mysql_store_result
                        for SHOW DATABASES\n");
         else
              {
                  show_result_set (result_set);
              }
      }
    printf("Tables\n");
    printf("======\n");
    if (mysql_query (cnx_init, "SHOW TABLES") != 0)
                  printf("Failure in show tables\n");
      else
         {
         result_set = mysql_store_result (cnx_init);
         if (result_set == NULL)
                     printf("failure in mysql_store_result
                                  for SHOW TABLES\n");
         else
              {
                          show_result_set (result_set);
              }
      }
    printf("Rows\n");
    printf("====\n");
    if (mysql_query(cnx_init, "Select * from tbl_books_1") != 0)
printf("Failure in show tables\n");
      else
         {
         result_set = mysql_store_result (cnx_init);
         if (result_set == NULL)
            printf("failure in mysql_store_result
                            for Select statement\n");
         else
              {
                          show_result_set (result_set);
              }
      }
      printf("Action Query\n");
      printf("============\n");
      if (mysql_query (cnx_init, "Update tbl_books_1
                                      set year = 1940
                                      where name='Ayn Rand'") != 0)
                  {  printf ("failure in mysql_query,
                                  Update statement.\n");
                     printf ("Exit code 4\n");
                     printf("Error %u -- %s\n",
                              mysql_errno (cnx_init),
                              mysql_error (cnx_init));
                     exit (4);
                  }
      else
      {printf ("statement succeeded:  %lu row(s) affected\n",
            (unsigned long) mysql_affected_rows(cnx_init));
      }
      mysql_close(cnx_init);
      printf("terminating\n");
      exit(0);
}
void show_result_set (MYSQL_RES *in_result_set)
{
     while ((row = mysql_fetch_row (in_result_set)) != NULL)
      {for (ctr=0;ctr < mysql_num_fields (in_result_set); ctr++)
            {if ( ctr > 0 )
               fputc ('\t', stdout);
               printf ("%s",row[ctr]!=NULL?row[ctr]:"Null-val");
            }
            fputc ('\n', stdout);
      }
      if (mysql_errno (cnx_init) != 0)
      {  printf ("failure in mysql_fetch_row\n");
         printf ("Exit code 3\n");
         printf("Error %u -- %s\n",
                  mysql_errno (cnx_init),
                  mysql_error (cnx_init));
         exit (3);
      }
      mysql_free_result (in_result_set);
}
A questo punto passo alla compilazione con i seguenti comandi:
1. gcc -c -I/usr/include/mysql ch1.c
(in questo caso tutto funziona lisco senza errori)
2. gcc -o ch1 ch1.o -L/usr/include/mysql -L/usr/lib/mysql/libmysqlclient
ma per questa riga ottengo:
ch1.o: In function 'main':
ch1.o(.text+0x1c): undefined reference to 'mysql_init'
ch1.o(.text+0x7b): undefined reference to 'mysql_real_connect'
............
..........
.........
collect2: ld returned 1 exit status
Come mai? Vi chiedo cortesemente aiuto.
Mr_Deckard
Grazie a tutti


I'm not prejudiced, I hate everyone equally.

 cc -o ch1 ch1.o -L/usr/lib/mysql/ -lmysqlclient
Grazie mille. Adesso funzione a meraviglia, chiedo scusa, effettivamente
avrei potuto dare un'occhiata al man!
Mr. Deckard
