Мне удалось подключиться к базе данных MySQL в моем приложении и использовать C API, который почти полностью аналогичен командам PHP ( mysql_real_connect (), mysql_query (), mysql_fetch_array () и т. д.), и с которыми мне довольно комфортно, я просто не знаю, как возвращается запрос данных. Использую ли я массив или словарь, а затем как мне его анализировать. Например, в PHP я бы сделал что-то вроде этого (после подключения):
$results = mysql_query("SELECT * FROM theDatabase");
if (mysql_num_rows($results) > 0) {
while($row = mysql_fetch_array($results)) {
print $row;
}
}
Каким будет эквивалент objective-c? Спасибо.
Edit:
Хорошо, я добился некоторого прогресса - я могу сделать запрос и получить количество возвращенных полей / строк, просто не может получить доступ к самим данным. Вот мой код, который я скомпилировал из документации MySQL и нескольких других сайтов:
- (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];
}