/**************************************************************** Developer: Darrell Cormier Date : 10-Aug-2005 App Name : msql_conn_env Purpose : Test MySQL connection using an environment variable for the connection string. ****************************************************************/
#ifdef HAVE_CONFIG_H #include <config.h> #endif #include <iostream> #include <cstdlib> #include "msql_conn_env.h" #define STRING_SIZE 50 MYSQL_STMT *stmt; MYSQL_BIND parm_bind[2], res_bind[1]; MYSQL_RES *ps_meta_result, *ps_results; int parm_count, col_count, row_count, fetch_row_count; unsigned long length, str_length[2]; my_bool is_null[1]; static char *sql_stmt = { "select product " "from lth " "where facility = ? " "and lot = ? " "and trn = \"LOGI\" " }; using namespace std; void print_error(MYSQL *conn, char *message) { cerr << message << endl; if (conn != NULL) { cerr << "ERROR " << mysql_errno(conn) << ": (" << mysql_error(conn) << ")" << endl; }//end if(conn != NULL) }//end print_error int main(int argc, char *argv[]) { char product[35], facility[6], lot[12]; string f_cility = "XTEX6"; conn=mysql_init(NULL); cout << conn << endl; if(conn==NULL) { print_error(conn,"F -- Database Login Failed!\n "); exit(1); } //end db init if (!s) { s = getenv ("DB_LZS_CONNECT"); if (!s) { //error ("Umgebungs-Variable DB_LZS_CONNECT ist nicht definiert."); //English translation needed: cerr << "Environment Variable DB_LZS_CONNECT not defined!\n"; } } //if (mysql_real_connect(conn,s) == NULL) if (mysql_real_connect(conn,my_host_name,my_user_name,my_pwd,my_db_name, my_port_number, my_socket_name, my_flags) == NULL) //MySQL connection --> NULL = Failure; a successful connection would return first variable's value (i.e. MySQL connection handle). { cerr << "No connection to the data base server (LTS DB).\n"; // no connection to database server } else { cerr << "Connection to the LTS database was successful.\n"; } stmt = mysql_stmt_init(conn); if(!stmt) { cerr << "mysql_stmt_init() failure. Possibly out of memory\n"; exit(0); } if(mysql_stmt_prepare(stmt, sql_stmt, strlen(sql_stmt))) { cerr << "mysql_stmt_prepare(), SELECT Failed!!\n"; cerr << mysql_stmt_error(stmt) << "\n"; exit(0); } cout << "mysql_stmt_prepare() was successful\n"; parm_count = mysql_stmt_param_count(stmt); cout << "total parameters in SELECT: " << parm_count << endl; //NEED TO VALIDATE PARAMETERS HERE// if (parm_count !=2) { cerr << " invalid parameter count returned by MySQL" << endl; exit(0); } memset (parm_bind, 0, sizeof(parm_bind)); str_length[0]= sizeof(facility); str_length[1]=sizeof(lot); strncpy(lot, "5028368",12); strncpy(facility, "XTEX6",6); //bind facility parm_bind[0].buffer_type= MYSQL_TYPE_STRING; parm_bind[0].buffer= (void*)&facility; parm_bind[0].buffer_length= sizeof(facility); parm_bind[0].is_null = &is_null[0]; parm_bind[0].length= &str_length[0]; //bind lot parm_bind[1].buffer_type = MYSQL_TYPE_STRING; parm_bind[1].buffer = (void*) &lot; parm_bind[1].buffer_length = sizeof(lot); parm_bind[1].is_null=&is_null[1]; parm_bind[1].length= &str_length[1]; // Specify the data values for the parameters. //strmov(szData, (char *)"venu"); //bind parameter buffers to prepared statement if (mysql_stmt_bind_param (stmt, parm_bind)) { cerr << " mysql_stmnt_bind_param() failed" << endl; cerr << mysql_stmt_error(stmt) << endl; exit(0); } /* Fetch result set meta information */ ps_meta_result = mysql_stmt_result_metadata(stmt); if (!ps_meta_result) { cerr << "ERROR - mysql_stmt_result_metadat() failed!" << endl; cerr << mysql_stmt_error(stmt) << endl; exit(0); } col_count = mysql_num_fields(ps_meta_result); cout << "Total number of columns in SELECT statement : " << col_count << endl; if (col_count !=1) //validate column count { cerr << " Invalid number of columns returned by MySQL!!" << endl; exit(0); } // Execute the SELECT query if(mysql_stmt_execute(stmt)) { cerr << " mysql_stmt_execute() failed!!" << endl; cerr << mysql_stmt_error(stmt) << endl; exit(0); } memset(res_bind, 0, sizeof(res_bind)); res_bind[0].buffer_type = MYSQL_TYPE_STRING; res_bind[0].buffer = (char*) &product; res_bind[0].buffer_length = STRING_SIZE; res_bind[0].is_null = &is_null[0]; res_bind[0].length = &length; // bind the results buffers if (mysql_stmt_bind_result(stmt, res_bind)) { cerr << "mysql_stmt_bind_result() failed" << endl; cerr << mysql_stmt_error(stmt) << endl; exit(0); } //buffer the results to the client if (mysql_stmt_store_result(stmt)!=0) { cerr << "mysql_stmt_store_result() failed" << endl; cerr << mysql_stmt_error(stmt) << endl; exit(0); } row_count = mysql_stmt_num_rows(stmt); //fetch all rows fetch_row_count=0; cout << "Fetching results..." << endl; while(!mysql_stmt_fetch(stmt)) { fetch_row_count++; cout << "Row " << fetch_row_count << endl; //product (aka column1)\ cout << "Product : "; if (is_null[0]) { cout << "NULL" << endl; } else { cout << product << "(" << length << ")" << endl; } } // end while fetch cout << "Total rows SELECTED: " << row_count << endl; cout << "Total rows fetched: " << fetch_row_count << endl; if (row_count != fetch_row_count) { cerr << "MySQL failed to return all data rows. " << endl; exit(0); } //Free the result metadata mysql_free_result(ps_meta_result); //Close prepared statement if (mysql_stmt_close(stmt)) { cerr << "ERROR - failed while closing the prepared statement. " << endl; cerr << mysql_stmt_error(stmt) << endl; exit(0); } return EXIT_SUCCESS; }
-- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]