Función no definida mysql_connect ()


83

He ejecutado aptitude install php5-mysql(y reiniciado MySQL / Apache 2), pero sigo recibiendo este error:

Error fatal: llamada a la función no definida mysql_connect () en /home/validate.php en la línea 21

phpinfo() dice que el archivo /etc/php5/apache2/conf.d/pdo_mysql.ini ha sido analizado.


¿Qué hay de otras funciones integradas de PHP / MySql? ¿Funcionan?
samayo

Quizás no, ya que intenté ingresar un usuario / contraseña incorrecto y mi declaración 'o morir' no se muestra.
user1765369

Respuestas:


53

Bueno, esta es tu oportunidad! Parece que PDO está listo; usa eso en su lugar.

Intente verificar si se está cargando el módulo de extensión PHP MySQL:

<?php
    phpinfo();
?>

Si no está allí, agregue lo siguiente al php.iniarchivo:

extension=php_mysql.dll

¿Es esta una mejor forma de conectarse a una base de datos? Lo investigaré, pero realmente me gustaría que esto funcione primero, ya que funcionó anteriormente hasta que me mudé a un nuevo servidor.
user1765369

2
Es. mysql_*Las funciones son peligrosas y obsoletas a partir de PHP 4.1. Verifique sus registros de errores de Apache y reinicie el servidor. ¿Eso funciona?
wanovak

Estoy usando xampp, después de agregar esa línea a php.ini, aparece el siguiente mensaje en apache error.log No se puede cargar la biblioteca dinámica '\\ xampp \\ php \\ ext \\ php_mysql.dll
bigpony

1
@defmx ¿Existe el archivo .dll en esa ruta? Si no, es necesario instalarlo.
wanovak

65

En caso de que ya esté usando PHP7, las funciones anteriormente obsoletas mysql_*se eliminaron por completo, por lo que debe actualizar su código utilizando las funciones o mysqli_*funciones PDO en su lugar.

Si eso no es posible, como solución temporal , creé un pequeño archivo de inclusión PHP, que recrea las mysql_*funciones antiguas con mysqli_*()-functions: fix_mysql.inc.php


1
Solución perfecta para mi caso, no podía simplemente actualizar todavía y romper todo mi código existente. Sin embargo, la variable $ con global en su archivo fue un problema porque el archivo incluido no pudo leer la variable global de la clase principal en la que el constructor lo incluí. Sin embargo, simplemente creé una variable de conexión dentro de las funciones del archivo incluido donde fuera necesario. Ahora mi código funciona bien. Gracias.
zeeshan

esto fue muy útil para mí para hacer que una base de código anterior se ejecutara nuevamente en una plataforma de servidor más nueva. ¡salud!
mxmader

4
Gracias ... me salvó la vida donde la producción se actualizó a php7 y la aplicación php5 se rompió
geekonweb

Esta es una excelente solución para ahorrar tiempo al tener que actualizar una aplicación PHP antigua. Muchas gracias.
Joel Karunungan

gracias @ ubo77. salvó algunos dolores de cabeza en una base de código heredada.
mikoop

57

Veo que etiquetó esto con Ubuntu. Lo más probable es que el controlador MySQL (y posiblemente MySQL) no esté instalado. Suponiendo que tiene acceso SSH o terminal y permisos sudo, inicie sesión en el servidor y ejecute esto:

sudo apt-get install mysql-server mysql-client php5-mysql

Si los paquetes MySQL o el paquete php5-mysql ya están instalados, esto los actualizará.


ACTUALIZAR

Dado que esta respuesta todavía recibe un clic ocasional, la actualizaré para incluir PHP 7 . PHP 7 requiere un paquete diferente para MySQL, por lo que querrá usar un argumento diferente para el comando apt-get.

sudo apt-get install mysql-server mysql-common php7.0 php7.0-mysql

Y lo que es más importante, mysql_connect()ha quedado obsoleto desde PHP v5.5.0. Consulte la documentación oficial aquí: PHP: mysql_connect ()


No puedo localizar el paquete php7.0
strangetimes

Reemplazar 7.0 con 7.3
rubo77


17

También me quedé atascado con el mismo problema de MySQL_connect () indefinido. Intenté hacer cambios en el archivo PHP.ini pero me estaba dando el mismo error. Luego llegué a esta solución donde cambié mi código de funciones php depreciadas a funciones nuevas.

$con=mysqli_connect($host,$user,$password);

mysqli_select_db($con,dbname); 
//To select the database

session_start(); //To start the session

$query=mysqli_query($con,your query); 
//made query after establishing connection with database.

Espero que esto ayude . Esta solución me está funcionando correctamente.

EDITAR:

Si actualiza el php antiguo, necesita apt-get install php7.0-mysql



6

Tratar:

<?php
  phpinfo();
?>

Ejecute la página y busque mysql. Si no lo encuentra, ejecute lo siguiente en el shell y reinicie el servidor Apache:

sudo apt-get install mysql-server mysql-client php5-mysql

También asegúrese de tener todas las siguientes líneas sin comentar en algún lugar de su archivo apache2.conf (o en su archivo conf.d / php.ini), desde

;extension=php_mysql.so

a

extension=php_mysql.so

4

Supongo que su instalación de PHP no se compiló con el soporte de MySQL.

Verifique su comando de configuración ( php -i | grep mysql). Deberías ver algo como '--with-mysql=shared,/usr'.

Puede consultar las instrucciones completas en http://php.net/manual/en/mysql.installation.php . Aunque, prefiero ir con la solución propuesta por @wanovak.

Aún así, creo que necesita compatibilidad con MySQL para usar PDO.


1

La pregunta está etiquetada con ubuntu, pero la solución para eliminar los comentarios extension=mysqli.dlles específica de Windows. Estoy confundido aquí?!, De todos modos, lo primero que ejecute <? php phpinfo ?>y busque mysql*bajo el Configurationencabezado. Si no ve algo así, significa que no lo ha instalado o habilitado php-mysql. Así que primero instalaphp-mysql

sudo apt get install php-mysql

Este comando se instalará php-mysqldependiendo del phpque ya hayas instalado, ¡así que no te preocupes por la versión!

Luego viene la solución específica de Unix, en el php.iniarchivo descomentar la línea

extension=msql.so

verificar que msql.soestá presente en /usr/lib/php/<timestamp_folder>, ELSE

extension=path/to/msql.so

Luego, finalmente reinicie los servicios apachey mysql, y ahora debería ver la mysqlsección bajo el Configrationsencabezado enphpinfo page


0

Recibí este error porque el proyecto en el que estaba trabajando se desarrolló en php 5.6 y, después de la instalación, el proyecto no pudo ejecutarse en php7.1.

Solo para cualquiera que use Vagrant con ubuntu / nginx, en el directorio nginx (/ etc / nginx /), hay un directorio llamado "sites-available" que contiene un archivo llamado como la url configurada para la máquina vagrant. En mi caso fue homestead.app. Dentro de este archivo hay una línea que dice algo como

    fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;

Allí puede cambiar la versión de php a la deseada para ese sitio en particular.

Busqué en Google, pero no pude encontrar una respuesta simple que dijera dónde buscar y qué cambiar.

Espero que esto ayude a alguien. Gracias.


0

Para CentOS 7.8 y PHP 7.3

yum install rh-php73-php-mysqlnd

Y luego reinicie apache / php.


-1

Si recibe el error como

Error fatal: llamada a la función no definida mysql_connect ()

Por favor inicie sesión en el cPanel >> Haga clic en Seleccionar versión de Php >> seleccione la extensión MYSQL


4
No hay ninguna sugerencia en la pregunta de que el OP esté utilizando CPanel.
Quentin

-3

Debe haber algún error de sintaxis. Copie / pegue este código y vea si funciona:

<?php
    $link = mysql_connect('localhost', 'root', '');
    if (!$link) {
        die('Could not connect:' . mysql_error());
    }
    echo 'Connected successfully';
    ?

Tuve el mismo mensaje de error. Resulta que estaba usando la msql_connect()función en lugar de mysql_connect().


OP tiene la función mysql_connect indefinida y no msql_connect, por lo que no la escribió incorrectamente como sugiere.
logicbloke

-3

(Configuración de Windows mysql)

Paso 1: Vaya al Panel de control de Apache> Apache> Configuración> PHP.ini

Paso 2: Buscar en el Bloc de notas (Ctrl + F) para: ;extension_dir = ""(podría comentarse con a ;). Reemplace esta línea con: extension_dir = "C:\php\ext"(por favor, no necesita eliminar el ;al principio de la oración).

Paso 3: Busque: extension=php_mysql.dlly elimine el ;al principio.

Paso 4: guarde y reinicie su servidor HTTP Apache. (En Windows esto generalmente se hace a través de una interfaz de usuario)

Eso es :)

Si recibe errores sobre falta php_mysql.dll , probablemente deba descargar este archivo desde el sitio php.net o pecl.php.net. (Tenga en cuenta de dónde lo obtiene)

Más información sobre PHP: Instalación de extensiones en Windows - Manual


1
Si bien esto puede ser correcto para Windows, esta pregunta está etiquetada como Ubuntu, que ciertamente no tiene C:\\phpen el sistema.
tadman

@tadman no importa si eso es para Ubuntu, me ha funcionado hoy después de una nueva instalación en Windows.
Ravi Gaurav Pandey

1
@RaviGauravPandey La pregunta original se refería a Ubuntu. Que funcione para usted en Windows no es el punto. Esta es una respuesta de Windows a una pregunta de Ubuntu.
tadman
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.