¿Cómo solucionar "Error fatal: Clase 'MySQLi' no encontrada"?

92

Estoy haciendo un tutorial y recibo este error:

Error fatal: no se encuentra la clase 'MySQLi' (URL LARGA) en la línea 8

El código de la línea 8 es:

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

Vi en línea que alguien dijo para ver si estaba activado en mi phpinfo (), pero no había nada en la lista para "mysqli".

Además, estoy ejecutando PHP versión 5.2.5

Tylor
fuente
Puede usar una clase MYSQLi escrita a mano , por lo que no necesita instalar mysqli. Es la única solución si no es propietario del servidor.
pollos

Respuestas:

83

Parece que solo necesitas instalar MySQLi .

Si cree que ha hecho eso y aún tiene un problema, publique su sistema operativo y cualquier otra cosa que pueda ayudar a diagnosticarlo más.

Greg
fuente
20
En AWS, simplemente ejecutasudo yum install php-mysqli
bobobobo
Para mí, se solucionó con: apt-get install php7.0-mysql. Estoy corriendo en Raspbian Stretch 9
negrotico19
En AWS con amazon linux, sería algo así como sudo yum install php56-mysqlnd.x86_64(elija la que coincida con la versión de php que ha instalado)
auspicious99
46

Puede verificar si las bibliotecas mysqli están presentes ejecutando este código:

if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
    echo 'We don\'t have mysqli!!!';
} else {
    echo 'Phew we have it!';
}
karim79
fuente
6
Todavía me sale "¡¡¡No tenemos mysqli !!!" incluso después de ejecutar `sudo apt-get install php5-mysqlnd`?
Banned_User
Recibo el mensaje 'Uf, lo tenemos, pero sigo recibiendo el mismo error que la clase' msqli 'no se encuentra en ... ¿alguna idea?
PA-GW
36

Si está en Ubuntu , ejecute:

 sudo apt-get install php5-mysqlnd
anshuman
fuente
5
¡Y no olvide reiniciar Apache después de esto!
fracz
@fracz Reiniciar Apache es la parte que olvidé. Solo reinicié MySQL. Gracias.
James
Esto no es suficiente. Todavía me faltaba el paquete php5-mysql. Úselo sudo apt-get -y install php5-mysql php5-mysqlndpara obtener ambos. ¿Es lo que te estabas perdiendo, @Hermann Ingjaldsson?
Balmipour
fue un error de configuración. stackoverflow.com/questions/31535173/…
Fzs2
21

Si está llamando a "new mysqli (..)" desde dentro de una clase con espacio de nombres, es posible que vea un error similar Fatal error: Class 'foo\bar\mysqli' not found in. La forma de solucionar esto es establecerlo explícitamente en el espacio de nombres raíz con una barra invertida anterior como esta:

<?php 
$mysqli = new \MySQLi($db_server, $db_user, $db_pass, $db_name);
alexkb
fuente
1
Esto debería ser lo primero a tener en cuenta.
James Bailey
15

Además de descomentar la extensión php_mysqli.dll en php.ini , también descomente la directiva extension_dir en php.ini y especifique su ubicación:

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

Esto hizo que funcionara para mí.

catawampus
fuente
Me funcionó pero con ./extcuál es el camino relativo. Y tuve que cambiar el nombre php.ini-developmentde php.iniy elimine el comentario en ese archivo extension=php_mysqli.dll. Oh chico, no te extrañé PHP.
Overdrivr
El truco aquí para mí (en Windows) fue escribir la ruta absoluta al directorio de extensiones en "extension_dir".
TechNyquist
5

Mi sistema operativo es Ubuntu . Resolví este problema usando:

sudo apt-get install php5-mysql
usuario3839088
fuente
En mint 19: sudo apt-get install php-mysql
Ailton F. Silva
2

Cómo habilitar mysqli en php.ini

  1. Edite / descomente quitando ';' (dos puntos) la siguiente configuración en php.ini: 1st (descomentar y agregar config): include_path = "C: \ php \ includes" 2nd (descomentar): extension_dir = "ext" 3rd (descomentar y editar la configuración): extensión = C: /PHP/ext/php_mysql.dll extensión = C: /PHP/ext/php_mysqli.dll
  2. Reinicie el servidor IIS
  3. Asegúrese de que mysql se esté ejecutando en el sistema.

Cómo cargar el archivo php.ini

  1. Cambie el nombre de cualquiera del archivo php.ini-production / php.ini-development a php.ini desde C: \ PHP (tenga en cuenta que ahora la extensión será ini, es decir, "php.ini").
  2. Después de cambiar el nombre al archivo php.ini, reinicie el servidor
  3. Vea los cambios en http: //localhost/phpinfo.php
Gani
fuente
2

Si está en Docker ...

Dentro de php-container RUN:

#docker-php-ext-install mysqli

#apachectl restart
Reyqueson
fuente
1

Pensé que podría ayudar a cualquiera con el mismo problema usando servidores de Namesco. He estado tratando de solucionar este problema después de mover una base de datos de mi servidor local en mi computadora personal a namesco. No ayudaron, dijeron que era un problema de codificación.

  • Sin embargo, fue fácil de arreglar desde su interfaz de alojamiento CPANEl LINUX.
  • Haga clic en php.
  • luego haga clic en los módulos php y de su lista de módulos preinstalados simplemente haga clic en la casilla de mysqli.
  • Luego haga clic en guardar. (No es necesario cambiar el código si funcionó (s) en otro servidor).

Desafortunadamente, sus artículos de apoyo fueron una pérdida de tiempo. Después de leer esto, fui a la interfaz de administración con una nueva determinación.

Juan
fuente
0

Algunas distribuciones (como Gentoo ) admiten múltiples instalaciones de PHP, y debes asegurarte de que estás usando una con mysqli instalado y habilitado.

En Gentoo, había instalado un nuevo PHP (con el indicador USE de mysqli habilitado), pero necesitaba activar la nueva versión de PHP (ya que a la antigua le faltaba 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
fuente
0

Revisé todo lo anterior y no funcionó para mí,

Hay algunos pasos que encontré.

Solía Versión PHP 5.5.9-1ubuntu4.17 en Ubuntu 14.04

Primero revisa la carpeta

#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

Si no contenía mysqli.ini , lea otra respuesta para instalarlo,

Abrir php.inibuscar extension_dir

En mi caso, debo establecer extension_dir = /usr/lib/php5/20121212

Y reinicie apache2: /ect/init.d/apache2 restart

vanduc1102
fuente
0

El zip de PHP incluye la mayoría de las extensiones de uso común (* .dll en Windows como php_mysqli.dll) en el directorio \ ext, sin embargo, no están habilitadas de forma predeterminada. Es posible que reciba este error fatal al intentar usar MySQLi:

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

Para habilitar las extensiones, abra php.ini (es posible que primero deba copiar php.ini-development como php.ini) y anule los comentarios (o agregue) estas dos líneas:

extension_dir = "ext"

Y cualquier extensión en particular para la que reciba errores fatales, es decir, para mysqli:

extension=mysqli
Griknok
fuente
0

en ubuntu:

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

En una nueva instalación de PHP, elimine ;antes extension_diren php.ini.

Andrei
fuente
0

en Debian 10

apt install php-mysql

/etc/init.d/apache2 restart
Salvador Rueda
fuente
0

Para cualquiera que use Docker, encontré este problema y lo resolví usando mi propio Dockerfile en lugar de la imagen php: fpm:

FROM php:fpm

RUN docker-php-ext-install mysqli
bozdoz
fuente
0

Encontré una solución para este problema después de un largo procedimiento de análisis. Después de probar correctamente mi instalación de php con las características de la línea de comandos, descubrí que php funciona bien y podría funcionar con la base de datos mysql. Por cierto. puede ejecutar archivos de código con código php con el comando php -f filename.php
Entonces me di cuenta de que algo debe estar mal con Apache.
Hice un archivo con solo la función phpinfo () dentro.
Aquí vi que en la línea
Archivo de
configuración cargado, mi archivo de configuración no se cargó, sino que se mencionó (ninguno).

Finalmente encontré dentro de la configuración de Apache la entrada

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

Pero instalé PHP 7 y Apache no pudo cargar el archivo php.ini porque no había una entrada para eso. yo añadí

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

y después de reiniciar Apache, todo funciona bien.

Estos bloques de código anteriores los encontré en mi archivo httpd-xampp.conf. Puede que esté en otro lugar de su configuración.
En el mismo archivo había cambiado antes la configuración de php 7 como reemplazo de la versión de 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"

Como puede ver, tengo el paquete xampp instalado, pero este problema estaba en el lado de Apache.

Klaus-Peter Ow Lex
fuente
0

instale la extensión phpXX por PHP. En el caso de mi FreeBSD:

pkg install php74-extensions
Biddut Mitra
fuente
0

Estoy usando xampp y mi problema se solucionó una vez que cambie el nombre:

extension_dir = "ext"

a

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

PD: ¡No olvide reiniciar Apache después de realizar este cambio!

Andrei
fuente
-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
fuente