bool CACHE_SESSION::save() { bool ret = false; MYSQL_STMT *stmt; MYSQL_BIND bind[2]; char *query = (char *)("UPDATE cache SET session=? WHERE session_id=?"); char *binbuff; unsigned long binlen; int session_id = this->session_id; MYSQL *mysql = (MYSQL *)epublisher->get_native_conn(); if( (stmt = mysql_stmt_init(mysql)) ) { if( (mysql_stmt_prepare(stmt, query, strlen(query))) == 0 ) { binlen = this->get_binsize(); // get size needed if(binbuff = (char *)EMALLOC(binlen)) { memset(binbuff, 0, binlen); binlen = this->serialize_bin((long *)binbuff); // serialize and get the real size memset(bind, 0, sizeof(bind)); bind[0].buffer_type = MYSQL_TYPE_VAR_STRING; bind[0].buffer = binbuff; bind[0].buffer_length = binlen; bind[0].is_null= 0; bind[0].length= &binlen; bind[1].buffer_type= MYSQL_TYPE_LONG; bind[1].buffer= (char *)&session_id; bind[1].is_null= 0; bind[1].length= 0; if (mysql_stmt_bind_param(stmt, bind) == 0) { if (mysql_stmt_execute(stmt) == 0) { if(mysql_stmt_affected_rows(stmt) == 1) { ret = true; } } } EFREE(binbuff); } } mysql_stmt_close(stmt); } return(ret); }
bool MySqlConnection::_Query(PreparedStmt* stmt, MYSQL_RES **pResult, uint64* pRowCount, uint32* pFieldCount) { if (!m_Mysql) return false; uint32 index = stmt->m_stmtIndex; { MySqlPreparedStmt* pStmt = GetPreparedStatement(index); pStmt->m_pPrepareStmt = stmt; // Cross reference them for debug output stmt->m_pStmt = pStmt; /// @todo Cleaner way stmt->bindParameters(); MYSQL_STMT* msql_STMT = pStmt->GetMySqlStmt(); MYSQL_BIND* msql_BIND = pStmt->GetBind(); if (mysql_stmt_bind_param(msql_STMT, msql_BIND)) { uint32 lErrno = mysql_errno(m_Mysql); ERROR_LOG("SQL(p): %s\n [ERROR]: [%u] %s\n", pStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return _Query(stmt, pResult, pRowCount, pFieldCount); // Try again pStmt->clearParameters(); return false; } TRACE_LOG("Exe SQL(p): %s\n\n", pStmt->getQueryString(m_queries[index].first).c_str()); if (mysql_stmt_execute(msql_STMT)) { uint32 lErrno = mysql_errno(m_Mysql); ERROR_LOG("SQL(p): %s\n [ERROR]: [%u] %s\n", pStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return _Query(stmt, pResult, pRowCount, pFieldCount); // Try again pStmt->clearParameters(); return false; } pStmt->clearParameters(); *pResult = mysql_stmt_result_metadata(msql_STMT); *pRowCount = mysql_stmt_num_rows(msql_STMT); *pFieldCount = mysql_stmt_field_count(msql_STMT); return true; } }
/** * Insert a new row into the database. * * @param[in] stmt The prepared database insert statement. * @param[in] station_id The station ID. * @param[in] sensor_type The sensor type. * @param[in] sensor_value The sensor value. * @param[in] age The age of the sensor reading, in seconds. */ static bool db_insert ( MYSQL_STMT *stmt, uint8_t station_id, uint8_t sensor_type, int16_t sensor_value, int16_t age ) { MYSQL_BIND params[SQL_NBIND]; memset(params, 0, sizeof(params)); /* age */ params[0].buffer_type = MYSQL_TYPE_SHORT; params[0].buffer = &age; params[0].buffer_length = sizeof(age); params[0].is_null = (my_bool *)0; params[0].is_unsigned = 0; /* station */ params[1].buffer_type = MYSQL_TYPE_TINY; params[1].buffer = &station_id; params[1].buffer_length = sizeof(station_id); params[1].is_null = (my_bool *)0; params[1].is_unsigned = 1; /* sensor */ params[2].buffer_type = MYSQL_TYPE_TINY; params[2].buffer = &sensor_type; params[2].buffer_length = sizeof(sensor_type); params[2].is_null = (my_bool *)0; params[2].is_unsigned = 1; /* value */ params[3].buffer_type = MYSQL_TYPE_SHORT; params[3].buffer = &sensor_value; params[3].buffer_length = sizeof(sensor_value); params[3].is_null = (my_bool *)0; params[3].is_unsigned = 0; if (mysql_stmt_bind_param(stmt, params)) return false; if (mysql_stmt_execute(stmt)) return false; return true; }
void MyTblFmncRMFileMSample::updateRec( FmncRMFileMSample* rec ) { unsigned long l[3]; my_bool n[3]; my_bool e[3]; MYSQL_BIND bind[] = { bindUbigint(&rec->refFmncMFile,&(l[0]),&(n[0]),&(e[0])), bindUbigint(&rec->refFmncMSample,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2])) }; if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncRMFileMSample / stmtUpdateRec)\n"); if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncRMFileMSample / stmtUpdateRec)\n"); };
/** * Bind params, give real values into prepared statement. * Up to two sets of parameters are provided. * Both of them are used in UPDATE command, params1 as colspecs and values and * params2 as WHERE clause. In other cases one set could be enough because values * or match (WHERE clause) is needed. * @param st MySQL command statement * @param params1 first set of params * @param params2 second set of params * @return 0 if OK, <0 on MySQL error, >0 on DB API error * @see update_params */ static int bind_mysql_params(MYSQL_STMT* st, db_fld_t* params1, db_fld_t* params2) { int my_idx, fld_idx; int count1, count2; MYSQL_BIND* my_params; int err = 0; /* Calculate the number of parameters */ for(count1 = 0; !DB_FLD_EMPTY(params1) && !DB_FLD_LAST(params1[count1]); count1++); for(count2 = 0; !DB_FLD_EMPTY(params2) && !DB_FLD_LAST(params2[count2]); count2++); if (st->param_count != count1 + count2) { BUG("mysql: Number of parameters in SQL command does not match number of DB API parameters\n"); return 1; } my_params = (MYSQL_BIND*)pkg_malloc(sizeof(MYSQL_BIND) * (count1 + count2)); if (my_params == NULL) { ERR("mysql: No memory left\n"); return -1; } memset(my_params, '\0', sizeof(MYSQL_BIND) * (count1 + count2)); /* params1 */ my_idx = 0; for (fld_idx = 0; fld_idx < count1; fld_idx++, my_idx++) { set_field(&my_params[my_idx], params1 + fld_idx); } /* params2 */ for (fld_idx = 0; fld_idx < count2; fld_idx++, my_idx++) { set_field(&my_params[my_idx], params2 + fld_idx); } err = mysql_stmt_bind_param(st, my_params); if (err) { ERR("mysql: libmysqlclient: %d, %s\n", mysql_stmt_errno(st), mysql_stmt_error(st)); goto error; } /* We do not need the array of MYSQL_BIND anymore, mysql_stmt_bind_param * creates a copy in the statement and we will update it there */ pkg_free(my_params); return err; error: if (my_params) pkg_free(my_params); return err; }
void Statement::Execute() { if (! _db.IsConnected()) { throw DatabaseException("Error in Statement::Execute", 0, "----", "Database is not connected"); } _numberAffectedRows = 0; _eof = true; _currentColumn = 0; if (ParameterCount() != _params.size()) { throw DatabaseException("Error in Statement::Execute", 0, "----", "Have not yet assigned all parameters"); } if (mysql_stmt_bind_param(_stmt, _bind) != 0) { throw DatabaseException(_stmt, "Error in Statement::Execute while binding parameters"); } if (mysql_stmt_execute(_stmt) != 0) { throw DatabaseException(_stmt, "Error in Statement::Execute while executing statement"); } if (_numberResultColumns > 0) { if (mysql_stmt_store_result(_stmt) != 0) { throw DatabaseException(_stmt, "Error in Statement::Execute while storing results"); } _eof = false; } else { _numberAffectedRows = mysql_stmt_affected_rows(_stmt); } _resultWasStored = true; if (_hasBlobField && _resultBind != NULL) { MYSQL_RES *res = mysql_stmt_result_metadata(_stmt); if (res != NULL) { for (unsigned int i = 0; i < _resultParams.size(); i++) { MYSQL_FIELD *column = mysql_fetch_field_direct(res, i); if (_resultBind[i].buffer_type == MYSQL_TYPE_BLOB) { _resultParams[i]->ResizeBlob(column->max_length); _resultBind[i].buffer = _resultParams[i]->Buffer(); _resultBind[i].buffer_length = _resultParams[i]->BufferSize(); _resultBind[i].length = _resultParams[i]->BufferLength(); } } mysql_free_result(res); } } }
NS_IMETHODIMP jxMySQL50Statement::Execute(PRUint32 *_retval) { if (mConnection == nsnull) { SET_ERROR_RETURN (JX_MYSQL50_ERROR_NOT_CONNECTED); } if (mSTMT == nsnull) { SET_ERROR_RETURN (JX_MYSQL50_ERROR_STMT_NULL); } *_retval = 1; // Assume the input parameters are all inited. // Get access to the array of parameter values and verify its length. if (mysql_stmt_bind_param(mSTMT, mIn.mBIND)) { //Error *_retval = 1; SET_ERROR_RETURN (JX_MYSQL50_MYSQL_ERROR); } // Bind output fields if not done already. if (!mOut.mBIND && mOut.mCount > 0) { nsresult rv = BindOutput(); if (NS_FAILED(rv)) { *_retval = 1; SET_ERROR_RETURN (rv); } } if (mysql_stmt_execute(mSTMT)) { *_retval = 1; SET_ERROR_RETURN (JX_MYSQL50_MYSQL_ERROR); } *_retval = 0; return NS_OK; }
bool MySQLConnection::Execute(PreparedStatement* stmt) { if (!m_Mysql) return false; uint32 index = stmt->m_index; { MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index); ASSERT(m_mStmt); // Can only be null if preparation failed, server side error or bad query m_mStmt->m_stmt = stmt; // Cross reference them for debug output stmt->m_stmt = m_mStmt; // TODO: Cleaner way stmt->BindParameters(); MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT(); MYSQL_BIND* msql_BIND = m_mStmt->GetBind(); uint32 _s = getMSTime(); if (mysql_stmt_bind_param(msql_STMT, msql_BIND)) { uint32 lErrno = mysql_errno(m_Mysql); sLog->outError(LOG_FILTER_SQL, "SQL(p): %s\n [ERROR]: [%u] %s", m_mStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return Execute(stmt); // Try again m_mStmt->ClearParameters(); return false; } if (mysql_stmt_execute(msql_STMT)) { uint32 lErrno = mysql_errno(m_Mysql); sLog->outError(LOG_FILTER_SQL, "SQL(p): %s\n [ERROR]: [%u] %s", m_mStmt->getQueryString(m_queries[index].first).c_str(), lErrno, mysql_stmt_error(msql_STMT)); if (_HandleMySQLErrno(lErrno)) // If it returns true, an error was handled successfully (i.e. reconnection) return Execute(stmt); // Try again m_mStmt->ClearParameters(); return false; } sLog->outDebug(LOG_FILTER_SQL, "[%u ms] SQL(p): %s", getMSTimeDiff(_s, getMSTime()), m_mStmt->getQueryString(m_queries[index].first).c_str()); m_mStmt->ClearParameters(); return true; } }
void MyTblFmncQPrj1NRun::updateRec( FmncQPrj1NRun* rec ) { unsigned long l[4]; my_bool n[4]; my_bool e[4]; MYSQL_BIND bind[] = { bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2])), bindUbigint(&rec->qref,&(l[3]),&(n[3]),&(e[3])) }; if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncQPrj1NRun / stmtUpdateRec)\n"); if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncQPrj1NRun / stmtUpdateRec)\n"); };
void MyTblPlnrJMUserState::updateRec( PlnrJMUserState* rec ) { unsigned long l[4]; my_bool n[4]; my_bool e[4]; MYSQL_BIND bind[] = { bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->x1Startd,&(l[1]),&(n[1]),&(e[1])), bindUint(&rec->ixVState,&(l[2]),&(n[2]),&(e[2])), bindUbigint(&rec->ref,&(l[3]),&(n[3]),&(e[3])) }; if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrJMUserState / stmtUpdateRec)\n"); if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrJMUserState / stmtUpdateRec)\n"); };
void MyTblFmncQStpRef1NFile::insertRec( FmncQStpRef1NFile* rec ) { unsigned long l[3]; my_bool n[3]; my_bool e[3]; MYSQL_BIND bind[] = { bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2])) }; if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncQStpRef1NFile / stmtInsertRec)\n"); if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncQStpRef1NFile / stmtInsertRec)\n"); rec->qref = mysql_stmt_insert_id(stmtInsertRec); };
bool updateStmtBind() { std::unique_ptr<MYSQL, MysqlDestroy> mysql{ mysql_init(nullptr) }; if (mysql_options(&*mysql, MYSQL_SET_CHARSET_NAME, "utf8") != 0) { printf("error mysql_options\n"); return false; } if (!mysql_real_connect(&*mysql, IP.c_str(), USER.c_str(), PASSWORD.c_str(), "mytest", PORT, nullptr, 0)) { printf("error mysql_real_connect\n"); return false; } std::unique_ptr<MYSQL_STMT, MysqlStmtDestroy> mysql_stmt{mysql_stmt_init(&*mysql)}; std::string sql = "update test set fname = ?, fsid = ?, ffloat = ? where fid = 1"; mysql_stmt_prepare(&*mysql_stmt, sql.data(), sql.size()); std::array<MYSQL_BIND, 3> b{}; std::memset(b.data(), 0, sizeof(b)); const char* fname = "hhh"; b[0].buffer_type = MYSQL_TYPE_STRING; b[0].buffer = (void*)fname; b[0].buffer_length = std::strlen(fname); int32_t fsid = 255; b[1].buffer_type = MYSQL_TYPE_TINY; b[1].buffer = &fsid; b[1].is_unsigned = 0; float ffloat = -1231.223; //b[2].buffer_type = MYSQL_TYPE_FLOAT; b[2].buffer_type = MYSQL_TYPE_NULL; b[2].buffer = &ffloat; /* my_bool is_null = 1; b[2].is_null = &is_null; */ mysql_stmt_bind_param(&*mysql_stmt, b.data()); auto ret = mysql_stmt_execute(&*mysql_stmt); if (ret != 0) { printf("error mysql_stmt_execute [%d] [%s]\n", ret, mysql_stmt_error(&*mysql_stmt)); return false; } return true; }
int db_read_open(const char *query, MYSQL_BIND *params, MYSQL_BIND *results) { /* Make sure we have a valid database connection. */ if (_mysql_con == NULL) { _mysql_con = mysql_init(NULL); if (_mysql_con == NULL) { finish_with_error(LOG_ERR, "Failed to initialize MySQL connection structure"); return -1; } if (mysql_real_connect(_mysql_con, options.db.host, options.db.nss.username, options.db.nss.password, options.db.database, 0, NULL, 0) == NULL) { finish_with_error(LOG_ERR, "Failed to connect to MySQL"); return -1; } } _mysql_stmt = mysql_stmt_init(_mysql_con); if (_mysql_stmt == NULL) { finish_with_error(LOG_ERR, "Failed to allocate MySQL prepared statement structure"); return -1; } if (mysql_stmt_prepare(_mysql_stmt, query, strlen(query) + 1) != 0) { mysql_stmt_close(_mysql_stmt); finish_with_error(LOG_ERR, "Failed to prepare MySQL statement"); return -1; } if (mysql_stmt_bind_param(_mysql_stmt, params) != 0) { mysql_stmt_close(_mysql_stmt); finish_with_error(LOG_ERR, "Failed to bind parameters to prepared MySQL statement"); return -1; } if (mysql_stmt_bind_result(_mysql_stmt, results) != 0) { mysql_stmt_close(_mysql_stmt); finish_with_error(LOG_ERR, "Failed to bind results for prepared MySQL statement"); return -1; } if (mysql_stmt_execute(_mysql_stmt) != 0) { mysql_stmt_close(_mysql_stmt); finish_with_error(LOG_ERR, "Failed to execute prepared MySQL statement"); return -1; } return 0; }
/* * Prepares the directory check query. * * The input and results for this query are in the cur_dir_check variable. */ static MYSQL_STMT * prepare_dir_query(sam_db_context_t *con) { MYSQL_STMT *stmt; char *query = "select name, ino, gen from sam_file where p_ino=? AND " "p_gen=? order by ino, gen"; MYSQL_BIND bind[2]; MYSQL_BIND result[3]; memset(&bind, 0, sizeof (bind)); memset(&result, 0, sizeof (result)); SAMDB_BIND(bind[0], cur_dir_check.p_ino, MYSQL_TYPE_LONG, TRUE); SAMDB_BIND(bind[1], cur_dir_check.p_gen, MYSQL_TYPE_LONG, TRUE); result[0].buffer = cur_dir_check.name; result[0].buffer_length = sizeof (cur_dir_check.name); result[0].length = &cur_dir_check.name_len; SAMDB_BIND(result[1], cur_dir_check.ino, MYSQL_TYPE_LONG, TRUE); SAMDB_BIND(result[2], cur_dir_check.gen, MYSQL_TYPE_LONG, TRUE); if ((stmt = mysql_stmt_init(con->mysql)) == NULL) { fprintf(stderr, "Error initializing statement: %s", mysql_error(con->mysql)); return (NULL); } if (mysql_stmt_prepare(stmt, query, strlen(query)) != 0) { fprintf(stderr, "Error preparing statement: %s", mysql_error(con->mysql)); mysql_stmt_close(stmt); return (NULL); } if (mysql_stmt_bind_param(stmt, bind)) { fprintf(stderr, "Error binding params: (%d) %s", mysql_stmt_errno(stmt), mysql_stmt_error(stmt)); mysql_stmt_close(stmt); return (NULL); } if (mysql_stmt_bind_result(stmt, result)) { fprintf(stderr, "Error binding result: (%d) %s", mysql_stmt_errno(stmt), mysql_stmt_error(stmt)); mysql_stmt_close(stmt); return (NULL); } return (stmt); }
bool MyStatement::Execute() { /* Clear any past result first! */ m_Results = false; /* Bind the parameters */ if (m_Params) { if (mysql_stmt_bind_param(m_stmt, m_bind) != 0) { return false; } } if (mysql_stmt_execute(m_stmt) != 0) { return false; } /* Skip away if we don't have data */ if (!m_pRes) { return true; } /* If we don't have a result manager, create one. */ if (!m_rs) { m_rs = new MyBoundResults(m_stmt, m_pRes); } /* Tell the result set to update its bind info, * and initialize itself if necessary. */ if (!(m_Results = m_rs->Initialize())) { return false; } /* Try precaching the results. */ m_Results = (mysql_stmt_store_result(m_stmt) == 0); /* Update now that the data is known. */ m_rs->Update(); /* Return indicator */ return m_Results; }
void MyTblFmncRMFileMSample::insertRec( FmncRMFileMSample* rec ) { unsigned long l[2]; my_bool n[2]; my_bool e[2]; MYSQL_BIND bind[] = { bindUbigint(&rec->refFmncMFile,&(l[0]),&(n[0]),&(e[0])), bindUbigint(&rec->refFmncMSample,&(l[1]),&(n[1]),&(e[1])) }; if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblFmncRMFileMSample / stmtInsertRec)\n"); // IP myInsertRec.execNounq --- BEGIN if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblFmncRMFileMSample / stmtInsertRec)\n"); rec->ref = mysql_stmt_insert_id(stmtInsertRec); // IP myInsertRec.execNounq --- END };
ResultSet_T MysqlPreparedStatement_executeQuery(T P) { assert(P); if (P->parameterCount > 0) if ((P->lastError = mysql_stmt_bind_param(P->stmt, P->bind))) THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); #if MYSQL_VERSION_ID >= 50002 unsigned long cursor = CURSOR_TYPE_READ_ONLY; mysql_stmt_attr_set(P->stmt, STMT_ATTR_CURSOR_TYPE, &cursor); #endif if ((P->lastError = mysql_stmt_execute(P->stmt))) THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); if (P->lastError == MYSQL_OK) return ResultSet_new(MysqlResultSet_new(P->stmt, P->maxRows, true), (Rop_T)&mysqlrops); THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); return NULL; }
void MysqlPreparedStatement_execute(T P) { assert(P); if (P->parameterCount > 0) if ((P->lastError = mysql_stmt_bind_param(P->stmt, P->bind))) THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); #if MYSQL_VERSION_ID >= 50002 unsigned long cursor = CURSOR_TYPE_NO_CURSOR; mysql_stmt_attr_set(P->stmt, STMT_ATTR_CURSOR_TYPE, &cursor); #endif if ((P->lastError = mysql_stmt_execute(P->stmt))) THROW(SQLException, "%s", mysql_stmt_error(P->stmt)); if (P->lastError == MYSQL_OK) { /* Discard prepared param data in client/server */ P->lastError = mysql_stmt_reset(P->stmt); } }
void MyTblPlnrAccRMUserUniversal::updateRec( PlnrAccRMUserUniversal* rec ) { unsigned long l[5]; my_bool n[5]; my_bool e[5]; MYSQL_BIND bind[] = { bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->unvIxPlnrVMaintable,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->unvUref,&(l[2]),&(n[2]),&(e[2])), bindUint(&rec->ixPlnrVAccess,&(l[3]),&(n[3]),&(e[3])), bindUbigint(&rec->ref,&(l[4]),&(n[4]),&(e[4])) }; if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrAccRMUserUniversal / stmtUpdateRec)\n"); if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrAccRMUserUniversal / stmtUpdateRec)\n"); };
static bool my_sharelog(const char *rem_host, const char *username, const char *our_result, const char *upstream_result, const char *reason, const char *solution) { MYSQL *db = srv.db_cxn; MYSQL_STMT *stmt; MYSQL_BIND bind_param[6]; unsigned long bind_lengths[6]; bool rc = false; const char *step = "init"; stmt = mysql_stmt_init(db); if (!stmt) return false; memset(bind_param, 0, sizeof(bind_param)); memset(bind_lengths, 0, sizeof(bind_lengths)); bind_instr(bind_param, bind_lengths, 0, rem_host); bind_instr(bind_param, bind_lengths, 1, username); bind_instr(bind_param, bind_lengths, 2, our_result); bind_instr(bind_param, bind_lengths, 3, upstream_result); bind_instr(bind_param, bind_lengths, 4, reason); bind_instr(bind_param, bind_lengths, 5, solution); step = "prep"; if (mysql_stmt_prepare(stmt, srv.db_stmt_sharelog, strlen(srv.db_stmt_sharelog))) goto err_out; step = "bind-param"; if (mysql_stmt_bind_param(stmt, bind_param)) goto err_out; step = "execute"; if (mysql_stmt_execute(stmt)) goto err_out; rc = true; out: mysql_stmt_close(stmt); return rc; err_out: applog(LOG_ERR, "mysql sharelog failed at %s", step); goto out; }
static int _update_timestamp (lmt_db_t db) { MYSQL_BIND param[1]; uint64_t timestamp; struct timeval tv; int retval = -1; assert (db->magic == LMT_DBHANDLE_MAGIC); if (!db->ins_timestamp_info) { errno = EPERM; goto done; } /* N.B. Round timestamp down to nearest multiple of LMT_UPDATE_INTERVAL, * seconds and don't insert a new entry if <= the last timestamp inserted. * This keeps the number of rows in TIMESTAMP_INFO in check. */ if (gettimeofday (&tv, NULL) < 0) goto done; timestamp = tv.tv_sec; timestamp -= (timestamp % LMT_UPDATE_INTERVAL); if (timestamp <= db->timestamp) { retval = 0; goto done; } memset (param, 0, sizeof (param)); assert (mysql_stmt_param_count (db->ins_timestamp_info) == 1); _param_init_int (¶m[0], MYSQL_TYPE_LONGLONG, ×tamp); if (mysql_stmt_bind_param (db->ins_timestamp_info, param)) { if (lmt_conf_get_db_debug ()) msg ("error binding params for insert into %s TIMESTAMP_INFO: %s", lmt_db_fsname (db), mysql_error (db->conn)); goto done; } if (mysql_stmt_execute (db->ins_timestamp_info)) { if (lmt_conf_get_db_debug ()) msg ("error executing insert into %s TIMESTAMP_INFO: %s", lmt_db_fsname (db), mysql_error (db->conn)); goto done; } db->timestamp = timestamp; db->timestamp_id = (uint64_t)mysql_insert_id (db->conn); retval = 0; done: return retval; }
void MyTblPlnrQUsgAAccess::insertRec( PlnrQUsgAAccess* rec ) { unsigned long l[5]; my_bool n[5]; my_bool e[5]; MYSQL_BIND bind[] = { bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->ref,&(l[2]),&(n[2]),&(e[2])), bindUint(&rec->x1IxPlnrVCard,&(l[3]),&(n[3]),&(e[3])), bindUint(&rec->ixPlnrWUiaccess,&(l[4]),&(n[4]),&(e[4])) }; if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrQUsgAAccess / stmtInsertRec)\n"); if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrQUsgAAccess / stmtInsertRec)\n"); rec->qref = mysql_stmt_insert_id(stmtInsertRec); };
void MyTblPlnrJMUserState::insertRec( PlnrJMUserState* rec ) { unsigned long l[3]; my_bool n[3]; my_bool e[3]; MYSQL_BIND bind[] = { bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->x1Startd,&(l[1]),&(n[1]),&(e[1])), bindUint(&rec->ixVState,&(l[2]),&(n[2]),&(e[2])) }; if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrJMUserState / stmtInsertRec)\n"); // IP myInsertRec.execNounq --- BEGIN if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrJMUserState / stmtInsertRec)\n"); rec->ref = mysql_stmt_insert_id(stmtInsertRec); // IP myInsertRec.execNounq --- END };
void MyTblPlnrQUsrMNUsergroup::updateRec( PlnrQUsrMNUsergroup* rec ) { unsigned long l[6]; my_bool n[6]; my_bool e[6]; MYSQL_BIND bind[] = { bindUbigint(&rec->jref,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->jnum,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->mref,&(l[2]),&(n[2]),&(e[2])), bindUbigint(&rec->ref,&(l[3]),&(n[3]),&(e[3])), bindUint(&rec->ixPlnrVUserlevel,&(l[4]),&(n[4]),&(e[4])), bindUbigint(&rec->qref,&(l[5]),&(n[5]),&(e[5])) }; if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrQUsrMNUsergroup / stmtUpdateRec)\n"); if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrQUsrMNUsergroup / stmtUpdateRec)\n"); };
int wb_dbms_query::bindQuery(void) { int rc = 0; static const char *method = "bindQuery"; if (m_nParam > 0) { rc = mysql_stmt_bind_param(m_stmt, m_param.bind); if (rc) error(rc, method, "mysql_stmt_bind_param"); } if (m_nResult > 0) { rc = mysql_stmt_bind_result(m_stmt, m_result.bind); if (rc) error(rc, method, "mysql_stmt_bind_result"); } return rc; }
bool MySQLConnection::Execute(PreparedStatement* stmt) { if (!m_Mysql) return false; uint32 index = stmt->m_index; { // guarded block for thread-safe mySQL request ACE_Guard<ACE_Thread_Mutex> query_connection_guard(m_Mutex); MySQLPreparedStatement* m_mStmt = GetPreparedStatement(index); ASSERT(m_mStmt); // Can only be null if preparation failed, server side error or bad query m_mStmt->m_stmt = stmt; // Cross reference them for debug output stmt->m_stmt = m_mStmt; // TODO: Cleaner way stmt->BindParameters(); MYSQL_STMT* msql_STMT = m_mStmt->GetSTMT(); MYSQL_BIND* msql_BIND = m_mStmt->GetBind(); #ifdef SQLQUERY_LOG uint32 _s = getMSTime(); #endif if (mysql_stmt_bind_param(msql_STMT, msql_BIND)) { sLog.outSQLDriver("[ERROR]: PreparedStatement (id: %u) error binding params: %s", index, mysql_stmt_error(msql_STMT)); m_mStmt->ClearParameters(); return false; } if (mysql_stmt_execute(msql_STMT)) { sLog.outSQLDriver("[ERROR]: PreparedStatement (id: %u) error executing: %s", index, mysql_stmt_error(msql_STMT)); m_mStmt->ClearParameters(); return false; } else { #ifdef SQLQUERY_LOG sLog.outSQLDriver("[%u ms] Prepared SQL: %u", getMSTimeDiff(_s, getMSTime()), index); #endif m_mStmt->ClearParameters(); return true; } } }
void MyTblPlnrAccRMUserUniversal::insertRec( PlnrAccRMUserUniversal* rec ) { unsigned long l[4]; my_bool n[4]; my_bool e[4]; MYSQL_BIND bind[] = { bindUbigint(&rec->refPlnrMUser,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->unvIxPlnrVMaintable,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->unvUref,&(l[2]),&(n[2]),&(e[2])), bindUint(&rec->ixPlnrVAccess,&(l[3]),&(n[3]),&(e[3])) }; if (mysql_stmt_bind_param(stmtInsertRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrAccRMUserUniversal / stmtInsertRec)\n"); // IP myInsertRec.execNounq --- BEGIN if (mysql_stmt_execute(stmtInsertRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrAccRMUserUniversal / stmtInsertRec)\n"); rec->ref = mysql_stmt_insert_id(stmtInsertRec); // IP myInsertRec.execNounq --- END };
void MyTblPlnrRMFaceMVertex::updateRec( PlnrRMFaceMVertex* rec ) { unsigned long l[7]; my_bool n[7]; my_bool e[7]; MYSQL_BIND bind[] = { bindUbigint(&rec->fceRefPlnrMFace,&(l[0]),&(n[0]),&(e[0])), bindUint(&rec->fceNum,&(l[1]),&(n[1]),&(e[1])), bindUbigint(&rec->refPlnrMVertex,&(l[2]),&(n[2]),&(e[2])), bindUint(&rec->rteIxVTbl,&(l[3]),&(n[3]),&(e[3])), bindUbigint(&rec->rteUref,&(l[4]),&(n[4]),&(e[4])), bindUint(&rec->ixVDir,&(l[5]),&(n[5]),&(e[5])), bindUbigint(&rec->ref,&(l[6]),&(n[6]),&(e[6])) }; if (mysql_stmt_bind_param(stmtUpdateRec, bind)) throw DbsException("DbsException / MySQL: error binding to statement! (TblPlnrRMFaceMVertex / stmtUpdateRec)\n"); if (mysql_stmt_execute(stmtUpdateRec)) throw DbsException("DbsException / MySQL: error executing statement! (TblPlnrRMFaceMVertex / stmtUpdateRec)\n"); };
result* mysql_statement::execute() { if (host_array) { int res = mysql_stmt_bind_param(stmt, host_array); if (res > 0) { throw_stmt_error(res, stmt, "mysql", str()); } } int res = mysql_stmt_execute(stmt); if (res > 0) { throw_stmt_error(res, stmt, "mysql", str()); } res = mysql_stmt_store_result(stmt); if (res > 0) { throw_stmt_error(res, stmt, "mysql", str()); } return new mysql_prepared_result(stmt, result_size); }
/*========================================== * プリペアドステートメントの実行 *------------------------------------------ */ bool sqldbs_stmt_execute(struct sqldbs_stmt *st) { nullpo_retr(false, st); if( (st->bind_params && mysql_stmt_bind_param(st->stmt, st->params)) || mysql_stmt_execute(st->stmt) ) { printf("DB server Error - %s\n %s\n\n", mysql_stmt_error(st->stmt), st->query); return false; } if( mysql_stmt_store_result(st->stmt) ) { printf("DB server Error - %s\n %s\n\n", mysql_stmt_error(st->stmt), st->query); return false; } return true; }