Hallo miteinander,
Hintergrund: Die Datensätze aus der Datenbank im RPi sollen auf eine Datenbank bei einem Webhoster repliziert werden.
Tabellenschema:
CREATE TABLE `events` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`gpio_id` tinyint(3) unsigned NOT NULL,
`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Prinzipielles Vorgehen: Abfrage der remote_db: last_id="SELECT MAX(id) FROM events"
local_db: "SELECT * FROM events WHERE id>last_id". Für jedes Ergebnis soll dann ein INSERT in die remote_db erfolgen.
Problem: Das Ergebnis durch MYSQL_ROW liegt in einem speziellen Format vor. Etwa so:
id NULLBYTE gpio_id NULLBYTE event_time NULLBYTE.
Wobei die Felder jeweils Zeichenketten sind, egal welches Datenbank-Format definiert ist.
Für die Abfrage "SELECT MAX(id) FROM events" konnte ich das Problem noch lösen durch
MYSQL_ROW row, last_remote_id;
char last_id[12];
...
last_remote_id = mysql_fetch_row (mysql_res);
char select[] = {"SELECT * FROM events WHERE id>"};
sprintf(last_id,"%s",last_remote_id[0]);
size_t len = MAX - strlen(select)+1;
strncat(select, last_id, len);
da dass Ergebnis in diesem Fall nur ein Feld lang ist.
Wie bekomme ich dass bei "SELECT * FROM events" hin, dass dann 3 Felder umfasst. Also jedes Feld in eine Variable vom Typ char zu packen?