¿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


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.


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!';
}

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

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);

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í.


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


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

2

Si está en Docker ...

Dentro de php-container RUN:

#docker-php-ext-install mysqli

#apachectl restart


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.


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

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


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


0

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



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

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.


0

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

pkg install php74-extensions

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!


-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());
            }
        }
    }
?>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.