2012-12-11 29 views
30

ho corse aptitude install php5-mysql (e riavviato MySQL/Apache 2), ma sto ancora ricevendo questo errore:funzione non definita mysql_connect()

Fatal error: Call to undefined function mysql_connect() in /home/validate.php on line 21

phpinfo() dice il /etc/php5/apache2/conf.d/ il file pdo_mysql.ini è stato analizzato.

+0

Che ne dici di altre funzioni PHP/MySql integrate? Lavorano? – samayo

+0

Forse no, dato che ho provato ad inserire un utente errato/passato e la mia 'o die' istruzione non viene mostrata! – user1765369

risposta

32

Bene, questa è la tua occasione! Sembra che PDO sia pronto; usalo invece.

Prova a controllare per vedere se il modulo di estensione di PHP MySQL viene caricata:

<?php 
    phpinfo(); 
?> 

Se non è lì, aggiungere quanto segue al file php.ini:

extension=php_mysql.dll 
+0

È un modo migliore per connettersi a un database? Lo esaminerò, ma mi piacerebbe davvero farlo funzionare prima come funzionava fino a quando non mi sono trasferito su un nuovo server. – user1765369

+2

Lo è. Le funzioni di 'mysql_ *' sono pericolose e deprecate a partire da PHP 4.1. Controlla i log degli errori di Apache e riavvia il server. Funziona? – wanovak

+0

Ho provato a riavviare il server, succede ancora. – user1765369

40

Vedo che hai contrassegnato questo con Ubuntu. Molto probabilmente il driver MySQL (ed eventualmente MySQL) non è installato. Supponendo di avere SSH o terminale di accesso e sudo permessi, accedere al server ed eseguire questo:

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

Se i pacchetti MySQL o il pacchetto php5-mysql sono già installati, questo li aggiornerà.


UPDATE

Dal momento che questa risposta ottiene ancora l'occasionale click ho intenzione di aggiornarlo per includere PHP 7. PHP 7 richiede un pacchetto diverso per MySQL, quindi vorrete usare un argomento diverso per il comando apt-get.

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

E, soprattutto, mysql_connect() è stato deprecato a partire da PHP v5.5.0. Fare riferimento alla documentazione ufficiale qui: PHP: mysql_connect()

+1

grazie per aver aggiornato la risposta – antix

+0

Non riesco a trovare il pacchetto php7.0 – strangetimes

6

Prova:

<?php 
    phpinfo(); 
?> 

eseguire la pagina e la ricerca di mysql. Se non trovato, eseguire il seguente nella shell e riavviare il server Apache:

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

anche assicurarsi di avere tutte le seguenti righe non commentate da qualche parte nel vostro apache2.conf (o nella vostra conf.d/php.ini) di file, da

;extension=php_mysql.so 

a

extension=php_mysql.so 
4

La mia ipotesi è la vostra installazione di PHP non è stato compilato con il supporto MySQL.

Controllare il comando configure (php -i | grep mysql). Dovresti vedere qualcosa come '--with-mysql=shared,/usr'.

È possibile verificare le istruzioni complete al numero http://php.net/manual/en/mysql.installation.php. Anche se preferirei andare con la soluzione proposta da @wanovak.

Tuttavia, penso che sia necessario il supporto MySQL per poter utilizzare PDO.

-3

Ci deve essere un errore di sintassi. Copia/incolla questo codice e vedi se funziona:

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

Ho avuto lo stesso messaggio di errore. Si scopre che stavo usando la funzione msql_connect() invece di mysql_connect().

+0

OP ha funzione non definita mysql_connect e non msql_connect, quindi non l'ha digitato in modo errato come suggerito. – PhoenixNoor

+0

beh, il tuo codice ha sicuramente un errore di sintassi. –

-3

Fase 1: Andare al Pannello di controllo di Apache> Apache> Configurazione> php.ini

Fase 2: Ricerca in Blocco note (Ctrl + F) Per: extension_dir = "". Sostituisci questa riga con: extension_dir = "C: \ php \ ext"

Passaggio 3: Cerca: extension = php_mysql.dll e rimuovere ; in fase di accattonaggio.

Passaggio 4: Salva e riavvia il pannello di controllo di Apache.

Questo è tutto :)

+1

Anche se questo potrebbe essere corretto per Windows, questa domanda è etichettata come Ubuntu, che sicuramente non ha 'C: \\ php' sul sistema. – tadman

-2

Se hai trovato l'errore come

Fatal error: Call to undefined function mysql_connect()

Gentilmente il login al cPanel >> Clicca su Seleziona Php versione >> selezionare l'estensione MYSQL

+3

Non vi è alcun suggerimento nella domanda che l'OP usi CPanel. – Quentin

15

Se si utilizza già PHP7, le funzioni precedentemente deprecate mysql_* sono state rimosse completamente, quindi è necessario aggiornare il codice utilizzando la funzione PDO. ioni o le funzioni mysqli_* invece.

Se questo non è possibile, come soluzione ho creato un piccolo file di inclusione, che ricrea le vecchie funzioni con mysqli_*() -Funzioni: fix_mysql.inc.php

+0

Soluzione perfetta per il mio caso, non potevo semplicemente aggiornare ancora e infrangere tutto il mio codice esistente. Tuttavia, la variabile globale $ con nel file era un problema perché il file incluso non era in grado di leggere la variabile globale della classe genitore in cui il costruttore l'ho inclusa. Tuttavia, ho semplicemente creato una variabile di connessione all'interno delle funzioni del file incluso dove necessario. Ora il mio codice funziona bene. Grazie. – zeeshan

+0

mi è stato di grande aiuto nell'ottenere un vecchio codebase in esecuzione su una piattaforma server più recente. Saluti! – mxmader

20

Se qualcuno è venuto qui con il problema della docker php official images, tipo sotto comando all'interno il contenitore docker.

$ docker-php-ext-install mysql mysqli pdo pdo_mysql 

Per ulteriori informazioni, fare riferimento alla sezione del link qui sopra How to install more PHP extensions (ma è un po 'difficile per me ...).

+1

'mysql' è ciò che voglio – deFreitas

0

Nel file php.ini

cambiamento questo

;extension=php_mysql.dll 

in

extension=php_mysql.dll 
1

La domanda è codificata con ubuntu, ma la soluzione di non-commentando la extension=mysqli.dll è specifico per le finestre . Sono confuso qui?!, Comunque, prima cosa eseguire <? php phpinfo ?> e cercare mysql* sotto il titolo Configuration. Se non vedi che una cosa del genere implica che non hai installato o abilitato php-mysql.Quindi, per prima cosa installare php-mysql

sudo apt get install php-mysql

Questo comando installerà php-mysql a seconda del php è già stato installato, quindi nessuna preoccupazione circa la versione !!.

Poi viene la soluzione specifica UNIX, nel file php.ini non-commento della linea

extension=msql.so 

verificare che msql.so è presente in /usr/lib/php/<timestamp_folder>, ELSE

extension=path/to/msql.so 

Poi finalmente riavviare il apache e mysql, e ora dovresti vedere la sezione mysql sotto Configrations heading in phpinfo page

0

Stavo ricevendo questo errore perché il progetto su cui stavo lavorando è stato sviluppato su php 5.6 e dopo l'installazione, il progetto non è stato in grado di girare su php7.1.

Solo per chiunque utilizzi Vagrant con ubuntu/nginx, nella directory nginx (/ etc/nginx /), esiste una directory denominata "sites-available" che contiene un file denominato come l'url configurato per il vagrant maschine . Nel mio caso era homestead.app. All'interno di questo file v'è una linea che dice qualcosa come

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

Non c'è possibile modificare la versione di PHP per la desiderata per quel particolare sito.

Cerca su Google questo, ma non sono riuscito a trovare una risposta semplice che dicesse dove guardare e cosa cambiare.

Spero che questo aiuti chiunque. Grazie.

4

Sono stato anche bloccato con lo stesso problema di MySQL_connect() non definito. Ho provato a apportare modifiche nel file PHP.ini ma mi stava dando lo stesso errore. Poi sono arrivato a questa soluzione in cui ho cambiato il mio codice dalle funzioni di php ammortizzate a nuove funzioni.

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

Spero che questo ti possa aiutare. Questa soluzione funziona correttamente per me.

+0

Formatta il tuo codice pls. Fai un [tour] (https://stackoverflow.com/help) su come rispondere a una domanda qui. – UmarZaii