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


Log in to reply