Comment résoudre "Erreur fatale: Classe 'MySQLi' introuvable"?

92

Je suis en train de faire un tutoriel et j'obtiens cette erreur:

Erreur fatale: classe 'MySQLi' introuvable (URL LONG) à la ligne 8

Le code de la ligne 8 est:

$mysqli = new MySQLi($db_server, $db_user, $db_pass, $db_name);

J'ai vu en ligne quelqu'un m'a dit de voir s'il était activé dans mon phpinfo (), mais il n'y avait rien de répertorié sous pour "mysqli".

De plus, j'utilise la version 5.2.5 de PHP

Tylor
la source
Vous pouvez utiliser une classe MYSQLi manuscrite , vous n'avez donc pas besoin d'installer mysqli. C'est la seule solution si vous ne possédez pas le serveur.
poulets

Réponses:

83

On dirait que vous devez simplement installer MySQLi .

Si vous pensez que vous avez fait cela et que vous rencontrez toujours un problème, veuillez publier votre système d'exploitation et tout ce qui pourrait aider à le diagnostiquer davantage.

Greg
la source
20
Sur AWS, vous venez de courirsudo yum install php-mysqli
bobobobo
Pour moi, il a été corrigé avec: apt-get install php7.0-mysql. Je cours sur Raspbian Stretch 9
negrotico19
Sur AWS avec amazon linux, ce serait quelque chose comme sudo yum install php56-mysqlnd.x86_64(choisissez celui correspondant à la version de php que vous avez installée)
auspicious99
46

Vous pouvez vérifier si les bibliothèques mysqli sont présentes en exécutant ce code:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}
karim79
la source
6
Je reçois toujours "Nous n'avons pas mysqli !!!" même après avoir exécuté `sudo apt-get install php5-mysqlnd`?
Banned_User
J'obtiens le 'Ouf, nous l'avons mais j'obtiens toujours la même erreur que la classe' msqli 'ne se trouve pas dans ... des idées?
PA-GW
36

Si vous êtes sur Ubuntu , exécutez:

 sudo apt-get install php5-mysqlnd
anshumain
la source
5
Et n'oubliez pas de redémarrer Apache après cela!
fracz
@fracz Le redémarrage d'Apache est la partie que j'ai oubliée. J'ai seulement redémarré MySQL. Merci.
James
Ce n'est pas assez. Je manquais toujours de paquet php5-mysql. Utilisez sudo apt-get -y install php5-mysql php5-mysqlndpour obtenir les deux. C'est ce qui vous manquait, @Hermann Ingjaldsson?
Balmipour
c'était une erreur de configuration. stackoverflow.com/questions/31535173/…
Fzs2
21

Si vous appelez "new mysqli (..)" depuis une classe dont l'espace de noms est espacé, vous pourriez voir une erreur similaire Fatal error: Class 'foo\bar\mysqli' not found in. La façon de résoudre ce problème est de le définir explicitement sur l'espace de noms racine avec une barre oblique inverse précédente comme ceci:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
alexkb
la source
1
Cela devrait être la première chose à regarder.
James Bailey
15

En plus de décommenter l' extension php_mysqli.dll dans php.ini , décommentez également la directive extension_dir dans php.ini et spécifiez votre emplacement:

extension_dir = "C:\software\php\dist\ext"

Cela a fonctionné pour moi.

catawampus
la source
Cela a fonctionné pour moi mais avec ./extquel chemin relatif. Et je devais renommer php.ini-developmentpour php.iniet décommenter dans ce fichier extension=php_mysqli.dll. Oh garçon, tu ne m'as pas manqué PHP.
Overdrivr
L'astuce ici pour moi (sous Windows) était de taper le chemin absolu vers les extensions dir dans "extension_dir".
TechNyquist
5

Mon système d'exploitation est Ubuntu . J'ai résolu ce problème en utilisant:

sudo apt-get install php5-mysql
user3839088
la source
Sur mint 19: sudo apt-get install php-mysql
Ailton F. Silva
2

Comment activer mysqli dans php.ini

  1. Modifier / décommenter en supprimant ';' (deux-points) la configuration suivante dans php.ini: 1st (décommenter et ajouter la configuration): include_path = "C: \ php \ includes" 2nd (décommenter): extension_dir = "ext" 3rd (décommenter) et modifiez la configuration): extension = C: /PHP/ext/php_mysql.dll extension = C: /PHP/ext/php_mysqli.dll
  2. Redémarrez le serveur IIS
  3. Assurez-vous que mysql est en cours d'exécution sur le système.

Comment charger le fichier php.ini

  1. Renommez n'importe lequel des fichiers php.ini-production / php.ini-development en php.ini depuis C: \ PHP (notez maintenant que l'extension sera ini, c'est-à-dire "php.ini").
  2. Après avoir renommé le serveur de redémarrage du fichier php.ini
  3. Voir les changements dans http: //localhost/phpinfo.php
Gani
la source
2

Si vous êtes sur Docker ...

À l'intérieur du conteneur php RUN:

#docker-php-ext-install mysqli

#apachectl restart
Reyqueson
la source
1

J'ai pensé que je pourrais aider n'importe qui avec le même problème en utilisant les serveurs Namesco. J'ai essayé de résoudre ce problème après avoir déplacé une base de données de mon serveur local sur mon ordinateur personnel vers namesco. Ils n'ont pas aidé, ils ont dit que c'était un problème de codage.

  • Cependant, il était simple de réparer depuis leur interface d'hébergement CPANEl LINUX.
  • Cliquez sur php.
  • puis cliquez sur les modules php et dans leur liste de modules préinstallés, cliquez simplement sur la case pour mysqli.
  • Cliquez ensuite sur Enregistrer. (Pas besoin de changer de code si cela fonctionnait sur un autre serveur.)

Malheureusement, leurs articles de support étaient une perte de temps. Après avoir lu ceci, je suis allé à l'interface d'administration avec une nouvelle détermination.

John
la source
0

Certaines distributions (comme Gentoo ) prennent en charge plusieurs installations de PHP, et vous devez vous assurer que vous en utilisez une avec mysqli installé et activé.

Sur Gentoo, j'avais installé un nouveau PHP (avec le drapeau mysqli USE activé), mais j'avais besoin d'activer la nouvelle version de PHP (puisque l'ancienne devait manquer mysqli):

# eselect php list apache2
  [1]   php5.3 *
  [2]   php5.5
# eselect php set apache2 2
You have to run `/etc/init.d/apache2 restart' for the changes to take effect
# /etc/init.d/apache2 restart
Jared Thirsk
la source
0

J'ai vérifié tout ci-dessus et cela n'a pas fonctionné pour moi,

Il y a quelques étapes que j'ai trouvées.

J'ai utilisé la version 5.5.9-1ubuntu4.17 de PHP sur Ubuntu 14.04

Vérifiez d'abord le dossier

#ls /etc/php5/mods-available/
json.ini  mcrypt.ini  mysqli.ini  mysql.ini  mysqlnd.ini  opcache.ini  pdo.ini  pdo_mysql.ini  readline.ini  xcache.ini

S'il ne contient pas mysqli.ini , lisez une autre réponse pour l'installer,

Ouvrez php.inifind extension_dir

Dans mon cas, je dois définir extension_dir = /usr/lib/php5/20121212

Et redémarrez apache2: /ect/init.d/apache2 restart

vanduc1102
la source
0

Le zip PHP inclut la plupart des extensions couramment utilisées (* .dll sur les fenêtres telles que php_mysqli.dll) dans le répertoire \ ext, mais elles ne sont pas activées par défaut. Vous pourriez obtenir cette erreur fatale en essayant d'utiliser MySQLi:

( ! ) Fatal error: Uncaught Error: Class 'mysqli' not found in C:\myProject\ class.Database.php on line 24

Pour activer les extensions, ouvrez php.ini (vous devrez peut-être d'abord copier php.ini-development en tant que php.ini) et annulez (ou ajoutez) ces deux lignes:

extension_dir = "ext"

Et toutes les extensions particulières pour lesquelles vous obtenez des erreurs fatales, par exemple pour mysqli:

extension=mysqli
Griknok
la source
0

sur ubuntu:

sudo apt-get install php-mysql
sudo service apache2 restart
vishalknishad
la source
0

Sur une nouvelle installation de PHP, supprimez ;avant extension_dirdans php.ini.

Andrei
la source
0

sur Debian 10

apt install php-mysql

/etc/init.d/apache2 restart
Salvador Rueda
la source
0

Pour tous ceux qui utilisent docker, j'ai rencontré ce problème et je l'ai résolu en utilisant mon propre Dockerfile au lieu de l'image php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli
bozdoz
la source
0

J'ai trouvé une solution à ce problème après une longue procédure d'analyse. Après avoir correctement testé mon installation php avec les fonctionnalités de ligne de commande, j'ai découvert que php fonctionnait bien et pouvait fonctionner avec la base de données mysql. Btw. vous pouvez exécuter des fichiers de code avec du code php avec la commande php -f filename.php
Donc j'ai réalisé que quelque chose ne va pas avec Apache.
J'ai créé un fichier avec juste la fonction phpinfo () à l'intérieur.
Ici, j'ai vu que dans la ligne
Loaded Configuration File,
mon fichier de configuration n'était pas chargé, mais il était mentionné (aucun).

Enfin, j'ai trouvé dans la configuration Apache l'entrée

<IfModule php5_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

Mais j'ai installé PHP 7 et donc Apache n'a pas pu charger le fichier php.ini car il n'y avait pas d'entrée pour cela. J'ai ajouté

<IfModule php7_module>
    PHPINIDir "C:/xampp/php"
</IfModule>

et après le redémarrage Apache tout fonctionne bien.

Ces blocs de code ci-dessus, j'ai trouvé dans mon fichier httpd-xampp.conf. Que ce soit ailleurs dans votre configuration.
Dans le même fichier, j'avais changé avant les paramètres du php 7 en remplacement de la version php 5.

#
# PHP-Module setup
#
#LoadFile "C:/xampp/php/php5ts.dll"
#LoadModule php5_module "C:/xampp/php/php5apache2_4.dll"
LoadFile "C:/xampp/php/php7ts.dll"
LoadModule php7_module "C:/xampp/php/php7apache2_4.dll"

Comme vous pouvez le voir, j'ai installé le package xampp mais ce problème était uniquement du côté d'Apache.

Klaus-Peter Ow Lex
la source
0

installer l'extension phpXX par PHP. Dans le cas de mon FreeBSD:

pkg install php74-extensions
Biddut Mitra
la source
0

J'utilise xampp et mon problème a été résolu une fois que j'ai renommé:

extension_dir = "ext"

à

extension_dir = "C:\xampp\php\ext"

PS: N'oubliez pas de redémarrer apache après avoir effectué ce changement!

Andrei
la source
-1
<?php  /* If the error is due to calling mysqli in a class */

    class dbconnect extends mysqli{

        private $host = 'localhost';
        private $user = 'root';
        private $pass = '';
        private $db = 'test';

        public function __construct() {
            parent::__construct($this->host, $this->user, $this->pass, $this->db);

            if (mysqli_connect_error()) {
                die('Connect Error (' . mysqli_connect_errno() . ') ' .
                    mysqli_connect_error());
            }
        }
    }
?>
hari
la source