# ObjC Mysql et MAMP avec Karl Kraft



## bebbeb (9 Novembre 2011)

Quelqu'un a-t-il réussi à utiliser la librairie de M. Karl Kraft pour accéder à MYSQL depuis xCode?
Et plus particulièrement à MYSQL de MAMP.

J'obtiens ces résultats, résultats si je puis dire lol:

2011-11-09 17:31:41.090 TestMysql[3480:707] Connecting to MysqlServer: 127.0.0.1:8889 as user root
2011-11-09 17:31:41.092 TestMysql[3480:707] Failed to connect: Error: Lost connection to MySQL server at 'reading initial communication packet', system error: 61
(mysqlServer description
2011-11-09 17:31:41.092 TestMysql[3480:707] MysqlServer: 127.0.0.1:8889 as user root
(mysqlConnection description:évidemment!)
2011-11-09 17:31:41.093 TestMysql[3480:707] (null)
2011-11-09 17:31:41.093 TestMysql[3480:707] connection is nil

Voilà, je débute la prog sur Mac, alors excusez-moi d'avance si la question est inepte!
Merci à tous,

Pour la librairie c'est ici : http://www.karlkraft.com/index.php/2011/06/07/mysql-for-iphone-and-osx-version-2-0/
il y a trois posts sur le sujet, sans trop d'explication hélas.

J'ai changé çà dans mysql_version.h :

/* Copyright Abandoned 1996, 1999, 2001 MySQL AB
   This file is public domain and comes with NO WARRANTY of any kind */

/* Version numbers for protocol & mysqld */

#ifndef _mysql_version_h
#define _mysql_version_h

#ifdef _CUSTOMCONFIG_
# include <custom_conf.h>
#else
# define PROTOCOL_VERSION		10
# define MYSQL_SERVER_VERSION		"6.0.0"
# define MYSQL_VERSION_ID		60000
# define MYSQL_PORT			8889
# define MYSQL_PORT_DEFAULT		0
# define MYSQL_UNIX_ADDR		"/Applications/MAMP/tmp/mysql/mysql.sock"
# define MYSQL_CONFIG_NAME		"my"
# define MYSQL_COMPILATION_COMMENT	"Source distribution"
#endif /* _CUSTOMCONFIG_ */

#ifndef LICENSE
# define LICENSE			GPL
#endif /* LICENSE */

#endif /* _mysql_version_h */

Y'a peut-être l'explication. Je ne sais pas comment il faudrait créer custom_conf.h donc...
Les paramètres sont peut-être inexacts.


----------



## bebbeb (10 Novembre 2011)

Bon, j'ai bossé 24h dessus et j'ai trouvé le problème tout seul! Alors je poste les résultats de mes recherches en imaginant que cela pourra aider quelques-uns d'entre vous qui voudraient utiliser MAMP en local avec un logiciel cocoa ou même le simulateur iOS (pas testé mais ça devrait fonctionner).

Tout d'abord, téléchargez la dernière version de M. Kraft ici : http://www.karlkraft.com/index.php/2011/06/07/mysql-for-iphone-and-osx-version-2-0/

Dézippez et ajoutez tout le dossier obtenu ("mysql_connector") à un projet Xcode. Retirer le groupe "lib/iOS" pour éviter l'erreur de compilation (on ne garde que la librairie pour une application cocoa, ou iOS si vous voulez essayer!).

Dans les fichiers MysqlServer.h et .m ajoutez un NSString que j'ai appelé sock:
.h:
NSString *sock;
@property(copy) NSString *sock;
.m:
@synthesize host,user,password,schema,*sock*;
- init;
{
  [super init];
  self.host=@"localhost";
  self.user=@"root";
  self.password=@"root";
  self.schema=@"maBase";
  self.sock=@"/Applications/MAMP/tmp/mysql/mysql.sock";
  self.port=8889;
  self.flags=CLIENT_FOUND_ROWS;
  self.connectionTimeout=30;
  return self;
}
selon vos paramètres MAMP changez le port, le user/password et évidemment le nom de votre base.

Dans MysqlConnection.m:
  if (!mysql_real_connect(&(newObject->_connection),
                          [server.host UTF8String],
                          [server.user UTF8String],
                          [server.password UTF8String],
                          [server.schema UTF8String],
                          server.port,  // default port
*[server.sock UTF8String]*,  // default socket
                          server.flags)) {
    MysqlLog(@"Failed to connect: Error: %s\n",mysql_error(&(newObject->_connection)));
    [newObject release];
    return nil;
  } else {
    MysqlLog(@"Connected to %@",server);
  }


Dans votre AppDelegate.m:
*#import "MysqlServer.h"
#import "MysqlConnection.h"
#import "MysqlFetch.h"*
(Ça! je ne suis pas sûr de l'utilisation, mais ça marche comme-çà!)

- (void)applicationDidFinishLaunchingNSNotification *)aNotification
{
    // Insert code here to initialize your application

    MysqlServer *server = [[[MysqlServer alloc] init] autorelease];
    MysqlConnection *connection = [MysqlConnection connectToServer:server];

    MysqlFetch *lesResultats = [MysqlFetch fetchWithCommand"SELECT * FROM resultats" onConnection:connection];

    NSLog(@"Nombre de résultats : %lu",[lesResultats.results count]);    
}

Et voilà c'est fait:

2011-11-10 20:34:25.818 ObjectiveMySQL[4928:707] Connecting to MysqlServer: localhost:8889 as user root
2011-11-10 20:34:25.821 ObjectiveMySQL[4928:707] Connected to MysqlServer: localhost:8889 as user root
2011-11-10 20:34:25.821 ObjectiveMySQL[4928:707] Client character set: utf8
2011-11-10 20:34:25.822 ObjectiveMySQL[4928:707] SELECT * FROM resultats
2011-11-10 20:34:25.828 ObjectiveMySQL[4928:707] Nombre de résultats : 52

Pour avoir les résultats dans la console, modifiez dans MysqlException.h:
#define MysqlLog(x...) NSLog(x);

Amusez-vous bien.

Je vous laisse voir pour les releases, mettre tout çà en ordre...


----------

