If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

 
Go Back  dBforums > Database Server Software > MySQL > undefined reference to `mysql_bind_param'

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1 (permalink)  
Old 12-18-08, 08:44
iqbal.ha iqbal.ha is offline
Registered User
 
Join Date: Oct 2008
Posts: 2
Question undefined reference to `mysql_bind_param'

Hi,

I have installed MySQL 6.0.6-alpha on Redhat Linux. I have a C program as follows.

Code:
#include <my_global.h>
#include <mysql.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STRING_SIZE 50

#define DROP_SAMPLE_TABLE "DROP TABLE IF EXISTS test_table"
#define CREATE_SAMPLE_TABLE "CREATE TABLE test_table(col1 INT,\
                                                 col2 VARCHAR(40),\
                                                 col3 SMALLINT,\
                                                 col4 TIMESTAMP)"
#define INSERT_SAMPLE "INSERT INTO test_table(col1,col2,col3) VALUES(?,?,?)"


static char *opt_host_name = "localhost"; /* server host (default=localhost) */
static char *opt_user_name = "test"; /* username (default=login name) */
static char *opt_password = ""; /* password (default=none) */
static unsigned int opt_port_num = 0; /* port number (use built-in value) */
static char *opt_socket_name = NULL; /* socket name (use built-in value) */
static char *opt_db_name = "test"; /* database name (default=none) */
static unsigned int opt_flags = 0; /* connection flags (none) */
static MYSQL *conn; /* pointer to connection handler */

void print_error(MYSQL *conn, char *);

int main() {
MYSQL_STMT    *stmt;
MYSQL_BIND    bind[3];
my_ulonglong  affected_rows;
int           param_count;
short         small_data;
int           int_data;
char          str_data[STRING_SIZE];
unsigned long str_length;
my_bool       is_null;


        conn = mysql_init (NULL);
        if (conn == NULL)
        {
                fprintf (stderr, "mysql_init() failed (probably out of memory)\n");
                exit (1);
        }
        /* connect to server */
        if (mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password, opt_db_name, opt_port_num, opt_socket_name, opt_flags) == NULL)
        {
                //fprintf (stderr, "mysql_real_connect() failed:\nError %u (%s)\n",mysql_errno (conn), mysql_error (conn));
                print_error(conn, "mysql_real_connect() failed");
                mysql_close (conn);
                exit (1);
        }


if(mysql_query(conn, DROP_SAMPLE_TABLE))
{
  fprintf(stderr, " DROP TABLE failed\n");
  fprintf(stderr, " %s\n", mysql_error(conn));
  exit(0);
}

if (mysql_query(conn, CREATE_SAMPLE_TABLE))
{
  fprintf(stderr, " CREATE TABLE failed\n");
  fprintf(stderr, " %s\n", mysql_error(conn));
  exit(0);
}

/* Prepare an INSERT query with 3 parameters */
/* (the TIMESTAMP column is not named; it will */
/* be set to the current date and time) */
//stmt = (MYSQL_STMT *)mysql_prepare(conn, INSERT_SAMPLE, strlen(INSERT_SAMPLE));
stmt = mysql_prepare(conn, INSERT_SAMPLE, strlen(INSERT_SAMPLE));
//stmt = mysql_stmt_prepare(conn, INSERT_SAMPLE, strlen(INSERT_SAMPLE));
if (!stmt)
{
  fprintf(stderr, " mysql_prepare(), INSERT failed\n");
  fprintf(stderr, " %s\n", mysql_error(conn));
  exit(0);
}
fprintf(stdout, " prepare, INSERT successful\n");

/* Get the parameter count from the statement */
param_count= mysql_param_count(stmt);
fprintf(stdout, " total parameters in INSERT: %d\n", param_count);

if (param_count != 3) /* validate parameter count */
{
  fprintf(stderr, " invalid parameter count returned by MySQL\n");
  exit(0);
}

/* Bind the data for all 3 parameters */

/* INTEGER PARAM */
/* This is a number type, so there is no need to specify buffer_length */
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer= (char *)&int_data;
bind[0].is_null= 0;
bind[0].length= 0;

/* STRING PARAM */
bind[1].buffer_type= MYSQL_TYPE_VAR_STRING;
bind[1].buffer= (char *)str_data;
bind[1].buffer_length= STRING_SIZE;
bind[1].is_null= 0;
bind[1].length= &str_length;
 
/* SMALLINT PARAM */
bind[2].buffer_type= MYSQL_TYPE_SHORT;
bind[2].buffer= (char *)&small_data;       
bind[2].is_null= &is_null;
bind[2].length= 0;

/* Bind the buffers */
if (mysql_bind_param(stmt, bind))
{
  fprintf(stderr, " mysql_bind_param() failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}

/* Specify the data values for the first row */
int_data= 10;             /* integer */
strncpy(str_data, "MySQL", STRING_SIZE); /* string  */
str_length= strlen(str_data);

/* INSERT SMALLINT data as NULL */
is_null= 1;

/* Execute the INSERT statement - 1*/
if (mysql_execute(stmt))
{
  fprintf(stderr, " mysql_execute(), 1 failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
  
/* Get the total number of affected rows */   
affected_rows= mysql_stmt_affected_rows(stmt);
fprintf(stdout, " total affected rows(insert 1): %ld\n", affected_rows);

if (affected_rows != 1) /* validate affected rows */
{
  fprintf(stderr, " invalid affected rows by MySQL\n");
  exit(0);
}

/* Specify data values for second row, then re-execute the statement */
int_data= 1000;             
strncpy(str_data, "The most popular open source database", STRING_SIZE); 
str_length= strlen(str_data);
small_data= 1000;         /* smallint */
is_null= 0;               /* reset */

/* Execute the INSERT statement - 2*/
if (mysql_execute(stmt))
{
  fprintf(stderr, " mysql_execute, 2 failed\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
  
/* Get the total rows affected */   
affected_rows= mysql_stmt_affected_rows(stmt);
fprintf(stdout, " total affected rows(insert 2): %ld\n", affected_rows);

if (affected_rows != 1) /* validate affected rows */
{
  fprintf(stderr, " invalid affected rows by MySQL\n");
  exit(0);
}

/* Close the statement */
if (mysql_stmt_close(stmt))
{
  fprintf(stderr, " failed while closing the statement\n");
  fprintf(stderr, " %s\n", mysql_stmt_error(stmt));
  exit(0);
}
        mysql_close (conn);
        exit (0);


}


void print_error(MYSQL *conn, char *message)
{
        fprintf (stderr, "%s\n", message);
        if (conn != NULL)
        {
                fprintf (stderr, "Error %u (%s)\n", mysql_errno (conn), mysql_error (conn));
        }
}



And I compiled the above program as follows.

gcc -o insert_by_bind -I/usr/local/mysql/include -L/usr/local/mysql/lib
-lmysqlclient -lz -lrt -lcrypt -lnsl -lm insert_by_bind.c

But I am getting the errors like:

insert_by_bind.c: undefined reference to `mysql_prepare'
/tmp/ccF5dT9h.o(.text+0x242):insert_by_bind.c: undefined reference to
`mysql_param_count'
/tmp/ccF5dT9h.o(.text+0x317):insert_by_bind.c: undefined reference to
`mysql_bind_param'
/tmp/ccF5dT9h.o(.text+0x3c1):insert_by_bind.c: undefined reference to
`mysql_execute'
/tmp/ccF5dT9h.o(.text+0x4cf):insert_by_bind.c: undefined reference to
`mysql_execute'
collect2: ld returned 1 exit status

I have set all the parameter....
LD_LIBRARY_PATH --> /usr/local/mysql/lib/
LD_LIBRARY --> /usr/local/mysql/lib/

Added the /usr/local/mysql/lib/ to ld.so.conf and executed the command
ldconfig.

Hope someone will help me in this regard.
Thanks in advance.

Regards,
iqbal

Last edited by iqbal.ha; 12-18-08 at 09:18.
Reply With Quote
Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On