Ich entwickle normalerweise mit einem Live-Server, aber zum ersten Mal dachte ich, ich würde den Sprung machen und sehen, ob ich alle meine (C++) MySQL-Code als eingebetteten Server arbeiten könnte. Besonders gern bereite ich mich auf vorbereitete Aussagen, da sie (IMHO) der nicht vorbereiteten Sorte "generell" überlegen sind.Sind vorbereitete Anweisungen in eingebetteten MySQL unterstützt
Ich habe versucht mit libmysqld von 5.5.22 und libmysqld von 5.6.4 und keiner funktioniert.
Verbindung wird hergestellt, einfache mysql_query/mysql_real_query Befehle funktionieren gut, aber sobald meine erste vorbereitete Anweisung einen mysql_stmt_fetch() ausgibt, bekomme ich die gehassten "Befehle nicht synchron" -Fehler.
Ein sehr ähnliches Problem apparte auf Orakelforen (http://forums.mysql.com/read.php?168,507863,507863#msg-507863) ohne Entschließung.
Ich sehe nicht, noch glaube ich, dass ich irgendwelche Befehle zwischen mysql_real_connect() und der mysql_stmt_fetch() fehlt.
Alle meine Suchen sind leer für jedes Beispiel eines eingebetteten Servers, der vorbereitete Anweisungen verwendet. Ich habe auch keinen wirklichen Satz gefunden, "das kannst du nicht tun".
Also ... ist es oder wird es nicht unterstützt?
Vielen Dank für Ihr Fachwissen.
// bearbeiten , um diese weiter zu entmystifizieren (und anweisen, falls erforderlich) meine volle mysql cmd-Sequenz ist wie folgt:
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);
an dieser Stelle, mysql_real_query() Anrufe arbeiten. Ich fahre fort ...
//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();
Vielen Dank für Ihre Hilfe. Meine Frage betrifft nicht den Wert vorbereiteter Anweisungen, sondern Informationen darüber, ob sie mit der eingebetteten mysql-Bibliothek arbeiten (dh kein externer Server). Für mich arbeiten sie NICHT. Zweitens ist der Aufruf von mysql_stmt_store_result nicht relevant. Für Ihre Referenz siehe: http://dev.mysql.com/doc/refman/5.5/en/mysql-stmt-store-result.html Wenn Sie nicht puffern die Fetch (was ich nicht bin), dann tun Sie nicht muss Laden anrufen (was ich nicht). Nichtsdestoweniger, nur um zu sehen, habe ich Ihren Vorschlag ausprobiert und die Un-Synchronisierung tritt bei dem Store-Befehl auf. –