mysql++: ich blicke noch nicht richtig durch: SELECT und UPDATE
-
Hallo zusammen,
folgendes soll gemacht werden:
Abfrage einiger Werte aus einer Tabelle und Auswertung in einer Schleife.
Bei jedem Schleifendurchgang soll dann ein UPDATE durchgeführt werden.// Connect to the sample database. mysqlpp::Connection conn(false); if (conn.connect(db, server, user, pass)) { //abfragen mysqlpp::Query query = conn.query("SELECT rid,url FROM records WHERE status = 0 AND DATE_SUB(start,INTERVAL 2 MINUTE)<NOW();"); if (mysqlpp::UseQueryResult res = query.use()) { // Display header cout.setf(ios::left); // Get each row in result set, and print its contents while (mysqlpp::Row row = res.fetch_row()) { cout << setw(8) << row["rid"] << row["url"] << endl; //UPDATE, das hier klappt nicht! mysqlpp::Query insertquery = conn.query("UPDATE records SET status=1 WHERE rid=3;"); insertquery.execute(); } // Check for error: can't distinguish "end of results" and // error cases in return from fetch_row() otherwise. if (conn.errnum()) { cerr << "Error received in fetching a row: " << conn.error() << endl; return 1; } return 0; } else { cerr << "Fehler bei START-Abfrage" << query.error() << endl; return 1; } } else { cerr << "DB connection failed: " << conn.error() << endl; return 1; }
Die Abfrage klappt nur das UPDATE in der Schleife nicht.
Error received in fetching a row: Commands out of sync; you can't run this command now
Jemand eine Idee?
Viele Grüße
Kai
-
Das habe ich auch schon probiert. Wenn ich mich recht erinnere sagt der MySQL-Fehler, dass diese Operationen nicht gleichzeitig durchgeführt werden können. Scheinbar ist das ein Lock-Problem - bin mir da aber auch nicht sicher.
blan
-
Scheint echt so zu sein.
Lösung: Abfrage komplett in ein Array schreiben und das dann (zB mit FOR) durchlaufen und dann die UPDATEs machen.
Grüße
Kai