Nueva pregunta

Pregunta:

Fecha: 19-07-2019 13:30:53 (En Español)

Fatal error: Class 'mysqli' not found in [Resuelta]

Utilizando WAMP, e iniciando con la versión 7.3.5 el error se presenta. Lo resuelvo cambiando a cualquier otra versión de PHP y luego regreso a la 7.3.5 con lo que el problema queda superado.

¿Cómo lo han superado?

Mi código es el siguiente:

	SESSION_START();
	if (array_key_exists('user', $_SESSION)){
		$usuario =$_SESSION['user'];
		$password=$_SESSION['password'];
	}
	else{
		$_SESSION['user'    ]= $_POST['user'    ];
		$_SESSION['password']= $_POST['password'];
	}
	$conn = new mysqli("localhost",$_SESSION['user'],$_SESSION['password'],$_SESSION['user']);
	if($conn->connect_error)
		die("Intente más tarde: ");
	$conn->close();
	header("Location: 1curso.php");
Etiquetas: Votos: 0 - Respuestas: 13 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 19-07-2019 14:01:13 La verdad no se si realmente es asi tu codigo...
    Pero en verdad quieres conectar a una base de datos con lo qu ehay en "sesion" ? ¿En serio?
    Honestamente eso es una falta de respeto... Cualquier programador por muy novato que sea, sabe que por seguridad eso no lo aria nunca.

    Y pasando al error, es precisamente por ello, por que no encentra el dato en la sesion (me imagino que biene de un inicio de sesion (login) para que guarde esos datos... pero esa logica es ta muy mal.

    1.- Debes conectar a la base de datos con informacion de algun archivo de configuracion.
    2.- Debera buscar en alguna tabla el usuario del la sesion y el password,

    No quiero parecer grosero, pero lee un poco de eso mismo, creo que no has leido en lo mas minimo, y son cosas logicas, basicas pero sobre todo que encuentras "googleando" y puedes resolver...

    Mira aqui sobre mysqli

    Saludos Terricola.

    Stryfe™
      Votos: -6 - Link respuesta
     
  • Fecha: 21-07-2019 07:09:25 Ernesto: no estoy de acuerdo con tu apreciación (Mucho menos con el tono de tu respuesta que me parece que no contribuye a crear comunidad).

    No quiero iniciar una polémica (no es mi estilo) pero tampoco me parece justo para quien hace una pregunta honesta recibir una respuesta como esta.
      Votos: 4 - Link respuesta
     
  • Fecha: 21-07-2019 23:50:17 Qué error te da? Debe ser que los datos de conexión no son correctos, están vacíos o similar.

    Obviamente tu código no es buena práctica, además de que ni compruebas los valores ni depuras los datos post. Mínimo usa trim() y empty().

    Si $_POST['user'] no existe te dará un error. Si existe pero está vacío o con caracteres no válidos lo estarás asignando a $_SESSION pero con valor incorrecto...
      Votos: 1 - Link respuesta
     
  • Fecha: 22-07-2019 07:02:39 Según tu código, el nombre de la base de datos a la que tratas de conectarte es igual al nombre de usuario... ¿es correcto? (o sea, cada usuario tiene su propia base de datos?)

    Si eso es así, tu error puede venir de variables de sesión (o $_POST) que no existen o no coinciden con los usuarios/bases de datos en tu proyecto.

    A primera vista no parece correcta la forma en que realizas la conexión a la base de datos (usando variables de sesion o $_POST) pero sin el contexto adecuado no creo que sea necesario entrar en críticas (en especial poco constructivas). Dicho eso, lo que es incorrecto es almacenar una clave (ya sea como variable de sesion o $_POST). Las claves deben recibirse (a través de una conexión cifrada de ser posible), comprobarse y olvidarse. Almacenar una clave como variable de sesión puede llevarte a problemas de seguridad (por ejemplo, voy al baño y cualquiera puede conectarse a mi base de datos, pues no se pide nuevamente la clave al estar almacenada.

    Saludos,
      Votos: 1 - Link respuesta
     
  • Fecha: 22-07-2019 12:39:21 En serio me pusieron -1, jajaja, se pasan.
    Por eso es bueno mínimo darle una leida a lo básico de los lenguajes...
    Y claro algunas otras son algo lógicas...
    Saludos a todos terrícolas.

    Stryfe™
      Votos: -2 - Link respuesta
     
  • Fecha: 23-07-2019 05:03:06 Correcto. Es un hecho que:

    1. La seguridad la tengo mal, aunque esto no significa que los datos de conexión no estén en $_SESSION o en $_POST. En todo caso, si no están en $_SESSION, lo estarán porque $_POST lo actualizará, sean o no corrextos en el caso ELSE.

    2. Si los datos no son correctos, la conexión falla y el programa avisa con un sencillo "Inténtelo más tarde".

    Independientemente de lo sí o no idóneo del código en materia de seguridad, es correcto y sobre todo, FUNCIONA, y lo pasé solamente por referencia, porque con él no tengo problema.

    El problema es de WAMP, que al iniciar de manera regular, cuando el indicador de actividad en la barra de tareas YA ESTÁ EN VERDE, el acceso a la base de datos me da el error indicado en el asunto de este hilo: "Fatal error: Class 'mysqli' not found in" el cual no es problema porque tengo una solución, la cual comenté en el post: "... cambiando a cualquier otra versión de PHP y luego regreso a la 7.3.5 con lo que el problema queda superado".

    Mi pregunta fue: "Cómo lo han superado", no se, moviendo algo en la configuración de php, de mysql, en fin, puede que sea un bug del servidor que he instalado. Es un problema que no es problema pero parece que generó más problemas.

    Gracias Mauro, Fernando y Juan por sus respuestas proactivas, y a Ernesto le agradezco sus oportunas consideraciones aunque totalmente fuera de contexto.
      Votos: 0 - Link respuesta
     
  • Fecha: 23-07-2019 14:40:28 Hola

    Crea un archivo con el siguiente script

    Archivo: phpinfo.php
    <?php 
    phpinfo(); 
    ?>
    


    En la versión de PHP que te da el error ejecutalo para ver la configuración de php.ini
    y ver si está activa MySQLi

    Sino abrir el archivo php.ini desde Wampserver corriendo la versión en la que tienes problemas.

    Verificar que esta linea no este asi, con el ; al inicio de linea
    ;extension=php_mysqli.dll
    

    Debería estar sin el ;
    extension=php_mysqli.dll


    Si tiene ; se lo quitas,lo guardas y reinicia los servicios de wampserver
    Y prueba nuevamente tu codigo.

    Captura de pantalla de ejemplo

    Saludos
      Votos: 2 - Link respuesta
     
  • Fecha: 23-07-2019 18:04:40 Verifique y las versiones anteriores inician mysqli sin problemas. El error es exclusivo de la versión 7.3.5. pero como ya expliqué: una vez cambio a cualquier otra versión y regreso a la 7.3.5 entonces ya se reporta en phpinfo(); gracias Walter.

    Infiero que esta versión de WAMPserver (3.1.9) privilegia las versiones 2.2.18.

    En cualquier caso, hay una solución pero me gustaría que el módulo "mysqli" se inicie en automático para esa versión; si tuvieran un dato lo agradeceré.

    Saludos.

    p.d. ¿Como agrego una captura de pantalla a este foro?

    ---

    Me respondo. Supongo que utilizando un almacén de imágenes.

    Este es el contenido parcial del .ini
    ;;;;;;;;;;;;;;;;;;;;;;
    ; Dynamic Extensions ;
    ;;;;;;;;;;;;;;;;;;;;;;

    ; If you wish to have an extension loaded automatically, use the following
    ; syntax:
    ;
    ; extension=modulename
    ;
    ; For example:
    ;
    ; extension=mysqli
    ;
    ; When the extension library to load is not located in the default extension
    ; directory, You may specify an absolute path to the library file:
    ;
    ; extension=/path/to/extension/mysqli.so
    ;
    ; Note : The syntax used in previous PHP versions ('extension=<ext>.so' and
    ; 'extension='php_<ext>.dll') is supported for legacy reasons and may be
    ; deprecated in a future PHP major version. So, when it is possible, please
    ; move to the new ('extension=<ext>) syntax.
    ;
    ; Notes for Windows environments :
    ;
    ; - Many DLL files are located in the extensions/ (PHP 4) or ext/ (PHP 5+)
    ; extension folders as well as the separate PECL DLL download (PHP 5+).
    ; Be sure to appropriately set the extension_dir directive.
    ;
    extension=bz2
    extension=curl
    ;extension=dba
    extension=com_dotnet
    ;extension=enchant
    extension=fileinfo
    ;extension=ftp
    extension=gd2
    extension=gettext
    extension=gmp
    extension=intl
    extension=imap
    ;extension=interbase
    extension=ldap
    extension=mbstring
    extension=exif ; Must be after mbstring as it depends on it
    extension=mysqli
    ;extension=odbc
    extension=openssl
    ;extension=pdo_firebird
    extension=pdo_mysql
    ;extension=pdo_oci
    ;extension=oci8_12c ; Use with Oracle Database 12c Instant Client
    ;extension=pdo_odbc
    ;extension=pdo_pgsql
    extension=pdo_sqlite
    ;extension=pgsql
    ;extension=phpdbg_webhelper
    ;extension=shmop

    ; The MIBS data available in the PHP distribution must be installed.
    ; See http://www.php.net/manual/en/snmp.installation.php
    ;extension=snmp

    extension=soap
    extension=sockets
    ;extension=sodium

    extension=sqlite3
    ;extension=sysvshm
    ;extension=tidy
    extension=xmlrpc
    extension=xsl
    ;extension=zend_test

    ;;;;;;;;;;;;;;;;;;;
    ; Module Settings ;
    ;;;;;;;;;;;;;;;;;;;

      Votos: 0 - Link respuesta
     
  • Fecha: 24-07-2019 00:10:35 Cuando instalas cualquier otra versión de php cambias la configuración de tu archivo de configuración de php en el paquete de wampp , por eso cuando regresas , ya tienes la configuración y el instaldor de php (Por alguna extraña razón) no lo sobreescribe, quizás el instalador esta configurado , a su vez , para que respete configuraciones previas.

    Solo edita a mano tu archivo de configuración de php y debe resolverse.
      Votos: 1 - Link respuesta
     
  • Fecha: 24-07-2019 04:44:36 Gracias Daniel.

    El registro en el archivo de errores indica: No es posible cargar la librería dinámica 'mysql' entre otras. Infiero que es 'cirugía' de configuración, pero, lo extraño es que el panel de control indica que está activado el módulo 'mysqli.dll' porque por supuesto, php.ini no lo tiene comentado.
      Votos: 0 - Link respuesta
     
  • Fecha: 24-07-2019 14:20:09 Hola podrías installar xampp server si usas windows, si usas mac usa MAMP ambos son mas estables que la versión que tienes instalado, otra, revisa los puertos skype a veces bloquea el puerto 80 y no compila bien, adicional te recomiendo usar pdo en vez de mysqli.

    si tienes duda con gusto puedo ayudarte.
      Votos: 1 - Link respuesta
     
  • Fecha: 25-07-2019 11:50:35 Hola Victor.
    El mensaje de error es muy claro y ayuda bastante a diagnosticar.

    Fatal error: Class 'mysqli' not found in

    Esot literalmente se traduce a "Error Fatal: Clase 'mysqli' no encontrada en". Esto no tiene nada que ver con tu código pues la clase mysqli es parte de una extensión de PHP. Muy seguramente el problema es que la extensión MySQLi no está instalada.

    Cómo saber si está instalada una extensión?
    La manera más fácil es revisar tu archivo php.ini (no es php-cli.ini pues ese es para las configuraciones de PHP via consola) y en la sección "Dynamic Extensions" buscar si la extensión está habilitada.

    Si encuentras una línea como:

    ;extension=mysqli

    Quiere decir que está deshabilitada.

    En algunas distros tienes que checar también la existencia de un archivo llamado:

    conf.d/20-mysqli.ini

    Y sucede lo mismo que en el caso anterior donde vas a revisar si la línea tiene un ';' al principio para determinar si está habilitada o no la extensión

    Otra manera de saber rápidamente es creando un script que contenga:

    phpinfo()

    En la página que te muestra revisas si la extensión se muestra. Si no muestra nada relacionado con MySQLi entonces está desactivada.

    Y cómo activo la extensión?

    Para habilitarla hay que remover el símbolo ';' del inicio de la línea en cualquiera de los archivos anteriormente mencionados para que se vea de la siguiente manera:

    extension=mysqli

    Una vez hecho esto es necesario reiniciar Apache.

    Entonces por qué si cambio de versión se elimina el error?
    Como menciona Daniel Badillo, puede ser que WAMP al cambiar de versión sobreescriba algunas configuraciones, ergo al cambiar a alguna versión que requiera la extensión esta se activa y al regresar a 7.4 pues ya funciona.

    Consideraciones adicionales
    Esta es una crítica constructiva de tu código.

    Tu código no se ve del todo bien y te puede dar problemas después. Trata de seguir los estándares de estilo seguidos por todos (PSR) en específico los que hablan del estilo como PSR-1 y PSR-2.

    No almacenes información sensible (contraseñas por ejemplo) en la sesión y jamás confíes en los datos puros de una petición, siempre valídala y/o fíltra los datos que vengan de un orígen externo (un usuario, sistemas de terceros, etc.).

    En el código que muestras los usuarios de tu sistema deberán ser usuarios de la base de datos. Lo he visto en sistemas como PHPMyAdmin donde el uso lo justifica pero aunado a esto pareciera que cada usuario tendrá una base de datos. Honestamente parece una mala implementación de un sistema de autenticación. Casi siempre pasa a quienes inician en la programación así que supongo que es parte de un proyecto de la escuela|universidad|diplomado|etc.

    Ojo que WAMP, XAMPP y todos esos sistemas NO son para utilizar en producción. Algunos lo dicen claramente en su página oficial.

    Espero estos últimos consejos te sirvan.

    Saludos!
      Votos: 1 - Link respuesta
     
  • Fecha: 25-07-2019 15:05:04 Hola Ernesto;

    Sigo buscando, considerando todo lo que me aportan, y encontré una pista: Basta con volver a cargar la misma versión (7.3.5) para que se actualicen las extensiones.

    Concluyo que es un error de la aplicación, y como no es la que utilizo en producción lo dejaré pasar, aunque, pude observar en las extensiones de 7.3.5 que los nombres de ellas no están bien escritas, y que no tienen la extensión del archivo, como lo indica la documentación que es requerido.

    Mi servidor de producción es un Zentyal 3.2 versión comunidad que aun utiliza una versión 'deprecated' de php que no está en mis manos actualizar por el momento.

    La idea de que cada usuario de la aplicación tenga una base de datos independiente, es para implementar menos controles sobre el acceso y uso de las tablas, así, todas ellas son propiedad del mismo, y por supuesto, lo utilizo como medida de autenticación.

    Verificare los estándares PSR

    Consideraré el almacenamiento de la contraseña en la sesión, la cual nunca pensé que tuviera problemas.

    Validaré los datos de origen externo.

    Cierro con esto. Saludos a todos.
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com