J'utilise bien CI avec le pilote MySQL. Je souhaite utiliser le pilote MySQL à la place, mais dès que je le modifie (il suffit d’ajouter le «i» à la fin de MySQL et d’ajouter le numéro de port). Le message d’erreur suivant s’affiche:
Une erreur est survenue dans la base de données
Impossible de se connecter à votre serveur de base de données en utilisant les paramètres fournis.
Nom de fichier: core/Loader.php
Numéro de ligne: 232
mon réglage ressemble à ceci:
$db['default']['hostname'] = $hostname;
$db['default']['username'] = $username;
$db['default']['password'] = $password;
$db['default']['database'] = $database;
$db['default']['dbdriver'] = 'mysqli';
$db['default']['port'] = "3306";
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
where
$hostname = 'localhost';
$username = 'myusernamegoeshere';
$password = 'mypasswordgoeshere';
$database = 'mydatabasenamegoeshere';
J'utilise:
CI 2.0.2 php 5.3.4 Apache/2.2.17 (Unix) mysql 5.5.13 mysql.default_port 3306
Est-ce que je fais quelque chose de mal?
Je vous remercie,
Pour moi, le problème était dans le fichier php.ini. La propriété mysql.default_socket pointait vers un fichier dans un répertoire inexistant. La propriété pointait sur /var/mysql/mysql.sock
mais sous OSX, le fichier se trouvait dans /tmp/mysql.sock
.
Une fois que j'ai mis à jour l'entrée dans php.ini et redémarré le serveur Web, le problème a été résolu.
Je pense qu'il y a quelque chose qui ne va pas avec PHP la migration.
Commencez par déboguer votre connexion à la base de données en utilisant ce script à la fin de ./config/database.php :
...
...
...
echo '<pre>';
print_r($db['default']);
echo '</pre>';
echo 'Connecting to database: ' .$db['default']['database'];
$dbh=mysql_connect
(
$db['default']['hostname'],
$db['default']['username'],
$db['default']['password'])
or die('Cannot connect to the database because: ' . mysql_error());
mysql_select_db ($db['default']['database']);
echo '<br /> Connected OK:' ;
die( 'file: ' .__FILE__ . ' Line: ' .__LINE__);
Ensuite, voyez quel est le problème.
Aujourd'hui, je suis tombé sur ce genre de problème dans le serveur live et j'ai résolu le problème en changeant cette ligne
$db['default']['db_debug'] = TRUE;
à
$db['default']['db_debug'] = FALSE;
J'ai résolu le problème en changeant
$db['default']['pconnect'] = TRUE;
À $db['default']['pconnect'] = FALSE;
dans /application/config/database.php
SET $db['default']['db_debug']
sur FALSE au lieu de TRUE.
$db['default']['db_debug'] = FALSE;
Si c'est tout ce que vous avez changé, le pilote mysqli n'est peut-être pas installé ou activé dans votre configuration PHP.
Vérifiez sa présence en utilisant phpinfo () ou dans votre fichier php.ini (extension = php_mysqli ....).
(CI 3) Pour moi, ce qui fonctionnait était en train de changer:
'hostname' => 'localhost' to 'hostname' => '127.0.0.1'
Problème résolu!
J'avais tout d'abord configuré mon site Web sous XAMMP, puis je devais le transférer sur LAMP, dans une installation SUSE de LAMP, où j'ai eu cette erreur.
Le problème est que ces paramètres du fichier database.php ne doivent pas être initialisés . Laissez juste le nom d'utilisateur et le mot de passe vides .
(Ma première hypothèse, ce serait en raison de l’ancienne version de MySQL, car les installations intégrées sont fournies avec des versions plus anciennes.
Remplacez $db['default']['dbdriver'] = 'mysql'
par $db['default']['dbdriver'] = 'mysqli'
Extension de @Valeh Hajiyev de la bonne réponse claire pour les tests de pilote mysqli
:
Déboguez votre connexion à la base de données en utilisant ce script à la fin de ./config/database.php:
/* Your db config here */
$db['default'] = array(
// ...
'dbdriver' => 'mysqli',
// ...
);
/* Connection test: */
echo '<pre>';
print_r($db['default']);
echo '</pre>';
echo 'Connecting to database: ' .$db['default']['database'];
$mysqli_connection = new MySQLi($db['default']['hostname'],
$db['default']['username'],
$db['default']['password'],
$db['default']['database']);
if ($mysqli_connection->connect_error) {
echo "Not connected, error: " . $mysqli_connection->connect_error;
}
else {
echo "Connected.";
}
die( 'file: ' .__FILE__ . ' Line: ' .__LINE__);
Si vous avez utilisé cela pour sécuriser votre serveur: http://www.thonky.com/how-to/prevent-base-64-decode-hack/
Et puis j'ai eu l'erreur: Code Igniter needs mysql_pconnect() in order to run
.
Je l'ai compris une fois que j'ai réalisé que tous les sites Web Code Igniter sur le serveur étaient en panne, donc ce n'était pas un problème de connexion localisée.