Normalmente desarrollo con un servidor en vivo, pero por primera vez pensé que daría el salto y vería si pudiera obtener todo mi código mysql (C++) funcionando como servidor incrustado. Particularmente, soy muy aficionado a las declaraciones preparadas ya que son (en mi humilde opinión) "en general" superiores a la variedad no preparada.Son declaraciones preparadas compatibles con MySQL incorporado
He intentado usar libmysqld desde 5.5.22 y libmysqld desde 5.6.4 y ninguno funciona.
La conexión está hecha, los comandos simples mysql_query/mysql_real_query funcionan bien, pero tan pronto como mi primera declaración preparada emita un mysql_stmt_fetch() obtengo el odiado error de 'comandos no sincronizados'.
Un problema similar aparece en los foros de oráculos (http://forums.mysql.com/read.php?168,507863,507863#msg-507863) sin resolución.
No veo, ni creo que me falten comandos entre mysql_real_connect() y mysql_stmt_fetch().
Todas mis búsquedas han quedado vacías para cualquier ejemplo de un servidor incrustado que esté utilizando declaraciones preparadas. Tampoco he encontrado una oración real "no puedes hacer esto".
Entonces ... ¿es o no es compatible?
Gracias por su experiencia.
// editar fin de desmitificar esta otra (y si es necesario instruir a) mi secuencia de MySQL cmd completa es la siguiente:
mysql_library_init(); // as embedded
mysql_init();
mysql_options(MYSQL_SET_CHARSET_NAME); //to utf8
mysql_options(MYSQL_OPT_USE_EMBEDDED_CONNECTION);
mysql_real_connect();
mysql_real_query("SET NAMES 'utf8'");
mysql_real_query("SET CHARACTER SET 'utf8'");
mysql_set_character_set("utf8"); // yes, you really do need to set utf8 four times
mysql_autocommit(mAutocommit);
en este punto, mysql_real_query() llama a hacer el trabajo. Sigo ...
//all this would only happen once for each stmt
{
mysql_stmt_init();
mysql_stmt_prepare(theQuery);
mysql_stmt_param_count(); // to assert input bind object (aka the predicates) has the same number of params as theQuery
mysql_stmt_result_metadata()
mysql_num_fields(); // to assert the output bind object has the same number of params as theQuery
mysql_free_result(metadata);
mysql_stmt_bind_param(); // called IF there are input params
mysql_stmt_bind_result(); // pretty much always called for the output params
}
// and at last
mysql_stmt_execute();
//mysql_stmt_store_result(); //{OPTIONAL: use if you want to buffer the fetch - I dont}
mysql_stmt_fetch(); // ERROR! commands out of sync.
// and for completeness,
mysql_stmt_free_result();
mysql_stmt_close();
// and the shutdown
mysql_close();
mysql_library_end();
Gracias por su ayuda. Mi pregunta no es sobre el valor de las declaraciones preparadas, sino sobre la información relacionada con el hecho de que funcionen o no con la biblioteca mysql incorporada (es decir, sin servidor externo). Para mí, NO están funcionando. en segundo lugar, llamar a mysql_stmt_store_result no es relevante. Para su referencia, vea: http://dev.mysql.com/doc/refman/5.5/en/mysql-stmt-store-result.html si no está almacenando en búfer la búsqueda (que NO), entonces NO Necesito llamar a la tienda (que no). Sin embargo, solo para ver, probé su sugerencia y la desincronización se produce en el comando de la tienda. –