He podido conectarme a una base de datos MySQL en mi aplicación y usar la API C, que es casi exactamente como los comandos PHP (mysql_real_connect(), mysql_query(), mysql_fetch_array(), etc.) y con lo cual estoy bastante cómodo. No estoy seguro de cómo se devuelve la consulta de datos. ¿Utilizo una matriz o diccionario y luego cómo lo analizaré? Por ejemplo, en PHP me gustaría hacer algo como lo que (después de la conexión):Objective-C y MySQL
$results = mysql_query("SELECT * FROM theDatabase");
if (mysql_num_rows($results) > 0) {
while($row = mysql_fetch_array($results)) {
print $row;
}
}
¿Cuál sería el objetivo a c equivalente? Gracias.
Editar:
OK, así que hice algunos progresos - Puedo hacer la consulta y obtener el número de campos/filas devueltas, simplemente parece que no puede acceder a los datos en sí. Aquí está mi código, que unirán de la documentación de MySQL y algunos otros sitios:
- (IBAction)dbConnect:(id)sender {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
MYSQL mysql;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "10.1.1.99", "******", "******", "oldphotoarchive", 0, NULL, 0)) {
NSLog(@"%@", [NSString stringWithUTF8String:mysql_error(&mysql)]);
} else {
MYSQL_RES *result;
MYSQL_ROW row;
unsigned int num_fields;
unsigned int num_rows;
unsigned long *lengths;
if (mysql_query(&mysql,"SELECT * FROM photorecord")) {
// error
} else { // query succeeded, process any data returned by it
result = mysql_store_result(&mysql);
if (result) {
num_fields = mysql_num_fields(result);
while ((row = mysql_fetch_row(result))) {
lengths = mysql_fetch_lengths(result);
for(int i = 0; i < num_fields; i++) {
//the line below is my problem, printing row[i] fails, I get the GNU gdb error...
row[i] ? NSLog(@"%@", row[i]) : NSLog(@"wtf");
}
}
} else {// mysql_store_result() returned nothing; should it have?
if (mysql_errno(&mysql)) {
NSLog(@ "Error: %s\n", mysql_error(&mysql));
} else if (mysql_field_count(&mysql) == 0) {
// query does not return data
// (it was not a SELECT)
num_rows = mysql_affected_rows(&mysql);
}
}
}
}
[pool release];
}