2011-09-06 5 views
0

J'essaie Kohana pour une application php, et j'ai un simple test de base de données qui fonctionne lorsque je me connecte à mon installation localhost de MySql. Mais quand j'essaye de changer la connexion à une base de données MySql à distance sur un hébergeur (Surftown), cela ne fonctionne pas.Impossible de se connecter au serveur MySql distant dans Kohana

Voici les données de connexion de database.php (la connexion « par défaut »):

 'hostname' => 'mydb23.surftown.se', 
     'database' => 'andclic_app', 
     'username' => 'myusername', 
     'password' => 'mypassword', 
     'persistent' => FALSE, 

Et puis j'essayer cela dans mon contrôleur:

$default = Database::instance('default'); 
$result = $default->query(Database::SELECT, 'SELECT * FROM products', TRUE); 

Mais je reçois une erreur disant aucune connexion n'existe:

62  catch (Exception $e) 
63  { 
64   // No connection exists 
65   $this->_connection = NULL; 
66 
67   throw new Database_Exception(':error', 
68    array(':error' => $e->getMessage()), 
69    $e->getCode()); 
70  } 
71 
72  // \xFF is a better delimiter, but the PHP driver uses underscore 

Alors qu'est-ce que je fais mal? J'ai également essayé d'employer le numéro d'IP au lieu du nom d'hôte, et j'ai essayé d'ajouter le port (: 3306), mais aucune n'a aidé.

+0

La base de données accepte-t-elle des connexions autres que localhost? – CodeCaster

+0

Bonne question, je n'avais pas encore commencé à télécharger sur le serveur, mais je l'ai fait maintenant, et cela fonctionne très bien à partir du serveur. Cependant, j'ai ajouté mon ip sur l'hébergeur comme exception, pour permettre l'accès depuis localhost. Et cela fonctionne quand je me connecte avec NaviCat ou Visual Studio, par exemple. Mais pas de l'application php lors de l'exécution de localhost ... – Anders

+0

@Whoever downvoted la question: pourquoi le downvote?Si vous pensez que quelque chose ne va pas, vous devriez au moins commenter pourquoi, sinon comment puis-je savoir ce que vous pensiez erroné? – Anders

Répondre

1

Assurez-vous de pouvoir vous connecter au serveur MySQL distant sans Kohana. Quelques conseils:

Database::instance('default'); 

Vous ne devez pas spécifier default, il est default par défaut.

$default->query(Database::SELECT, 'SELECT * FROM products', TRUE); 

Assurez-vous que vous appelez la méthode ->execute() pour exécuter la requête.

2

Ce problème se produit lorsque php est activé pour afficher des erreurs obsolètes. Le pilote mysql est basé sur la bibliothèque mysql_connect qui a été dépréciée. Lorsque votre php jette une erreur déconseillée sur cette bibliothèque, la classe Kohana ne peut pas gérer l'erreur. Pour éviter cette erreur, vous devez ajouter la ligne suivante de code dans: Modules-> database-> classes-> kohana-> database-> mysql.php

Recherchez la ligne de code suivante:

// Prevent this information from showing up in traces 
    unset($this->_config['connection']['username'], $this->_config['connection']['password']); 

Ajoutez la ligne suivante au fichier juste après la ligne précédente:

//Added to suppress deprecated error due to deprecated driver 
    error_reporting(E_ALL^E_DEPRECATED); 

après avoir ajouté cette ligne, le code d'erreur dépréciée sera supprimée et vous serez en mesure d'utiliser l'extension mysql_connect.

Ceci est une solution temporaire car finalement vous devez migrer votre code pour la nouvelle extension pris en charge mysqlite

Ce problème se produit primariy avec les versions de php Dernieres. Vous ne rencontrerez pas ce comportement dans une ancienne version de php.

J'espère que ça m'a pris du temps pour comprendre cela.

Questions connexes