2010-01-28 2 views
1

Mon application utilise ADODB pour se connecter simultanément à 2 MySQL DB. L'application télécharge de gros fichiers; cela prend beaucoup de temps et l'erreur "mysql a disparu" a lieu.php ADODB appel mysql_options() avant la connexion à MySQL

Je sais que MySQL permet d'utiliser la reconnexion automatique qui pourrait être activée en utilisant mysql_options(), mais je n'ai aucune idée de la façon d'appliquer cette fonction à l'adaptateur ADODB.

$DB = NewADOConnection('mysql'); 
    $DB->Connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_DBNAME); 

Merci pour votre temps! PS: Probablement je devrais demander comment obtenir la variable de gestionnaire de DB de $ DB? Si je pouvais obtenir le gestionnaire de connexion DB d'ADODO en tant que gestionnaire $, je pourrais utiliser mysql_options ($ handler, MYSQL_OPT_RECONNECT, 1); Mais comment pourrais-je obtenir $ handler si je devais appeler mysql_options() avant la connexion (selon la référence MySQL http://dev.mysql.com/doc/refman/5.0/en/mysql-options.html)

+0

La fonction mysql_options() semble être indisponible à l'API PHP MySQL :( – Kirzilla

Répondre

0

Pour définir les options mysql, vous pouvez utiliser dsn. Ceci est mon modèle de connexion que j'utilise toujours:

$options = ''; 
if ($driver == 'mysql' OR $driver == 'mysqli') 
{ 
    if ($params['pconnect'] === TRUE) 
    { 
    $options .= '?persist'; 
    } 
    $flags = MYSQL_CLIENT_COMPRESS; 
    $options .= (empty($options)?'?':'&')."clientflags=$flags"; 
} 

$dsn = "{$driver}://{$username}:{$password}@{$hostname}/{$database}{$options}"; 

if ($driver == 'sqlite') 
{ 
    if ($params['pconnect'] === TRUE) 
    { 
    $options = '?persist'; 
    } 
    $database = urlencode($database); 
    $dsn = "{$driver}://{$database}{$options}"; 
} 

$adodb =& ADONewConnection($dsn); 

if ($adodb) 
{ 
    //set fetch mode 
    $adodb->SetFetchMode(ADODB_FETCH_BOTH); 

    //character set 
    if ($driver == 'mysql' OR $driver == 'mysqli') 
    { 
    if (isset($params['char_set']) AND $params['char_set'] 
     AND isset($params['dbcollat']) AND $params['dbcollat']) 
    { 
     $charset = $adodb->qstr($params['char_set']); 
     $collation = $adodb->qstr($params['dbcollat']); 
     $adodb->Execute("SET NAMES $charset COLLATE $collation"); 
    } 
    } 
    if ($debug) 
    { 
    @ob_start(); 
    $adodb->debug = TRUE; 
    } 
} 

Vous pouvez omettre le bloc conditionnel du pilote sqlite si vous ne l'utiliser pour MySQL. Apparent, PHP client MySQL supporte uniquement l'option limitée, here is the list. Vous pouvez essayer MySQLi, il have more options.

Avez-vous essayé la connexion persistante istead?

+0

MySQLi lib est exactement ce que je cherchais, n'est-ce pas ADODB supporte MySQLi? – Kirzilla

+0

Merci J'ai trouvé le pilote MySQLi dans ADODB Essayez maintenant .. – Kirzilla

+0

Pour savoir quels pilotes dans ADODb, jetez un coup d'oeil dans le dossier 'drivers' Le nom du fichier du pilote suit le format suivant:' adodb- [DRIVER_NAME] .inc.php' –