web-dev-qa-db-fra.com

PHP/Apache: PHP Erreur fatale: appel de la fonction indéfinie mysql_connect ()

J'ai MySQL (5.5.23 Community Server), Apache (2.2) et PHP (5.3.13) s'exécutant sur une machine Fedora 15 (64 bits). Chacun fonctionne sans problème par eux-mêmes.

Je pensais que PHP était configuré/compilé pour fonctionner avec MySQL, mais lorsque j'essaie de charger une page Web PHP qui passe un appel MySQL, l'erreur d'erreur fatale indiquée ci-dessus apparaît (dans le journal ). PHP fonctionne bien tout seul, via Apache et en ligne de commande.

Lorsque j'exécute php -i depuis la ligne de commande, il affiche tous les éléments de base de MySQL, mais lorsque je charge une page affichant phpinfo (), aucun module MySQL n'est mentionné.

J'ai aussi essayé de supprimer les commentaires "extension = mysql.so" dans php.ini, mais PHP se plaint alors de "Démarrage PHP: impossible de charger la bibliothèque dynamique '/usr/lib64/php/modules/mysql.so'." (même si le module y réside). Mais alors je ne suis pas tout à fait sûr si cette ligne doit être non commentée ou non. [correction: l'erreur indiquée est en fait due à une faute de frappe, mais l'exécution à partir de la ligne de commande montre que le module est déjà chargé de toute façon - il y a un avertissement de PHP qui le dit.]

J'ai aussi désactivé SELinux; arrêté/redémarré Apache plusieurs fois; Miam MySQL-Devel, au cas où cela ferait une différence; et, semble-t-il, toutes les autres choses possibles.

Si j'exécute un petit script de test PHP à partir de la ligne de commande, pour accéder à la base de données MySQL, alors cela fonctionne sans problème. Par conséquent, PHP connaît l'existence de MySQL, mais il semble fonctionner sous n'ai aucune idée que MySQL existe même.

Cela fait des mois que j'essaye de résoudre ce problème et que je semble avoir tout essayé, mais rien ne semble fonctionner.

Cela ne me dérange pas de réinstaller PHP si je le dois vraiment, si quelqu'un peut démontrer la bonne façon de configurer/compiler avec le support MySQL, afin que je puisse le faire fonctionner sous Apache, bien qu'idéalement, je Je préférerais simplement que l’installation existante fonctionne.

Merci d'avance pour toute aide!

25
Cheddar

Au cas où quelqu'un d'autre serait confronté à cela, c'est le cas où PHP n'a pas accès aux bibliothèques clientes mysql. Avoir un serveur MySQL sur le système n'est pas la solution correcte. Correction pour Ubuntu (et PHP 5): 

Sudo apt-get install php5-mysql

Après avoir installé le client, le serveur Web doit être redémarré. Si vous utilisez Apache, ce qui suit devrait fonctionner:

Sudo service Apache2 restart
63
andreimarinescu

N'oubliez pas qu'à partir de PHP 5.5.0, la fonction mysql_connect() est obsolète et complètement supprimée dans PHP 7.

Plus d'informations peuvent être trouvées sur le documentation php :

Citation:

Attention
Cette extension était obsolète dans PHP 5.5.0 et supprimée dans PHP 7.0.0. À la place, vous devez utiliser l’extension MySQLi ou PDO_MySQL. Voir aussi MySQL: choisir un guide d'API et la FAQ associée pour plus d'informations. Les alternatives à cette fonction incluent:
* mysqli_connect ()
* PDO :: __ construct () 

16
Tim Penner

J'ai eu le même problème et je devais me référer au manuel php qui me disait que les extensions mysql et mysqli nécessitent le chargement de libmysql.dll. Je l'ai cherché sous C:\windows\system32 (Windows 7) et je ne l'ai pas trouvé. Je l'ai donc téléchargé ici et l'ai placé dans mon C:\windows\system32. J'ai redémarré Apache et tout a bien fonctionné. Il m'a fallu 3 jours pour comprendre, espérons que cela aide.

2
che-azeh

Comment Bout

Sudo yum installe php-mysql

ou

Sudo apt-get install php5-mysql

0
Rahim Khoja

La version du module Apache PHP pourrait, pour une raison quelconque, ne pas utiliser le fichier php.ini comme version CLI.

  • Toute différence dans les fichiers .ini qui diffère entre php -i et phpinfo() via une page Web *
  • S'il n'y a pas de différences, examinez les autorisations de mysql.so et des fichiers .ini, mais je pense qu'Apache les analyse comme l'utilisateur root.

Pour être vraiment clair ici, ne cherchez pas les fichiers php.ini sur le système de fichiers, regardez ce que PHP dit qu'il regarde

0
James C