mysqli_fetch_array - PHP 7.1.x-mysqli_connect no está definido(la extensión está activada)
mysqli php ejemplos (1)
Fondo
Primero, un poco sobre la forma en que WAMPServer maneja los archivos php.ini
. Si usa phpinfo()
, puede observar que la ruta al archivo ini
cargado NO es el archivo ini
en la instalación de PHP. En cambio, apunta a la instalación de Apache.
Pero si lo miras, es un enlace simbólico de 0 0KB
. Lo que realmente es es un enlace a un archivo ini
en la instalación de PHP. Pero no es el php.ini
, sino que apunta a phpForApache.ini
. Así que esto:
.../wamp64/bin/apache/apache2.4.23/bin/php.ini
es en realidad
.../wamp64/bin/php/php[VERSION]/phpForApache.ini
Entonces, puedes ignorar lo que está en la carpeta Apache y enfocarte en tus archivos ini
en la carpeta PHP. Sin embargo, no puede ignorar el php.ini
. Debes corregir ambos.
Felicitaciones a Jon Stirling por sugerir comprobar el archivo de configuración cargado en phpInfo()
.
Lo que hice
Instalé PHP 7.1 desde el sitio web de PHP y olvidé transferir mis archivos ini
desde la instalación de PHP 7.0. En su lugar, utilicé los archivos ini
predeterminados proporcionados por el sitio web de PHP.
Eso no funcionó, porque hay ajustes en los archivos ini
que se necesitan para que PHP funcione con WAMP. Así que copié los dos archivos ini
de mi carpeta 7.0.x, y luego comenzó a funcionar, en su mayoría, excepto por el error con mysqli.
Causa raíz de mi problema
Después de arañar esto durante una hora, la última pregunta de Fred-ii- finalmente me llevó a la respuesta. Tenía PHP tratando de hacer referencia a viejos archivos de extensión. Aquí es por qué:
El archivo php.ini
y el archivo phpForApache.ini
, proporcionado por WAMP, codifican algunas rutas. Por ejemplo, la ruta de la carpeta de extensiones para PHP 7.0.10 está codificada de la siguiente manera:
extension_dir ="c:/wamp64/bin/php/php7.0.10/ext/"
Copié los archivos ini
, pero estaban apuntando a la carpeta de extensión para 7.0. Los archivos dll
para 7.0.x no funcionan con 7.1.x.
Responder
phpForApache.ini
a los dos archivos ( php.ini
phpForApache.ini
) en la carpeta PHP 7.1.4 y reemplacé globalmente todas las instancias del texto "7.0.10" por "7.1.4". Y ahora todo está funcionando.
Fondo
Tengo el servidor WAMP (3.0.6) instalado en mi computadora con Windows 10. Estoy desarrollando un sitio de WordPress usando algunas tablas personalizadas de MySQL, así que estoy usando $wpdb
.
Problema
Me estaba ejecutando en PHP 7.0.10, y todo estaba bien. Esta mañana, instalé PHP 7.1.4, y de repente obtuve este error:
Error fatal: error no detectado: llamada a la función indefinida mysql_connect () en ... / wp-includes / wp-db.php: 1573
Indagué en él y __construct()
el problema hasta la función __construct()
, y esta declaración if
:
if ( function_exists( ''mysqli_connect'' ) ) {
Un var_dump me mostró que function_exists( ''mysqli_connect'' )
devuelve false
.
No es la respuesta
El problema NO es que no tenga habilitada la extensión mysqli
:
Cosas que he probado
He cambiado de nuevo a 7.0.x (y el error desapareció), eliminé 7.1.4, reinstalé 7.1.4 y volví a conectarlo. Todavía no funciona.
Intenté 7.1.0, y no funciona.
Intenté activar y desactivar la extensión, y eso no cambia nada.
Intenté copiar el archivo php_mysqli.dll
actual del php_mysqli.dll
de trabajo 7.0.10, en el directorio 7.1.4, y eso no funciona.
Editar
Por solicitud, agregué capturas de pantalla de lo que se muestra en phpinfo()
. En 7.0, veo la sección de información para mysqli, y debajo de 7.1, falta la sección.