PHP mysqli() ne fonctionne pas
Pour commencer, je suis nouveau en PHP, et ceci est mon premier post sur stackoverflow.
Je suis en train d'utiliser mysqli_connect() pour écrire un enregistrement dans une table des utilisateurs dans une base de données de test.
Dans mysql-client, je peux ajouter un enregistrement avec la commande:
INSERT INTO users VALUES ( 'id' , 'smith' , 'joe' , 'joepass' );
Aussi loin que je peux comprendre, le suivant .page php doit ajouter joe smith à la table des utilisateurs quand il est atteint dans un navigateur:
<?php
echo "php start";
$con = mysqli_connect( "localhost" , "root" , "rootpass" , "db_name");
//Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query( $con , "INSERT INTO users values ( 'id' , 'smith' , 'joe' , 'joepass' )");
mysqli_close($con);
echo "php end";
?>
Mais quand je vais sur cette page dans un navigateur, je ne vois que le texte "php start" qui est le premier écho de la déclaration. Je m'attends à voir les mots "php fin" ainsi. Lorsque je vérifie la table des utilisateurs dans le client mysql je ne vois pas de nouveau record. Aussi, quand j'ai ouvert le php shell interactif avec php -a
et exécutez la commande mysqli_connect();
la réponse est PHP Fatal error: Call to undefined function mysql_connect() in php shell code on line 1
.
Cela me mène à croire que mysqli_connect n'est pas installé ou configuré correctement en php.ini, mais je n'ai pas une assez bonne compréhension de php.ini pour dépanner très bien. Aussi, j'ai un phpinfo() test.php page. Dans les "Crédits" de la table de la fonction phpinfo (), je vois les lignes suivantes:
MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter
MySQLi Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel
MySQLnd Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlueter
MySQL Zeev Suraski, Zak Greant, Georg Richter, Andrey Hristov
Pour installer php, apache et mysql sur ce serveur Ubuntu, les commandes que j'ai sont:
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install php5-cli
et la seule configuration que j'ai réalisé que je me rappelle c'est d'ajouter un couple de noms de fichiers pour les apache2/mods-available/dir.conf
ligne DirectoryIndex
pour ouvrir certains noms de fichiers automatiquement.
Est-il mysqli
de configuration qui doit être fait avant que les fonctions peuvent être utilisées?
Aussi, c'est une AWS serveur, mais je ne vois pas comment il pourrait y avoir un problème de réseau à 'localhost'... 😛
Je vais aussi inclure une grep -r 'mysqli'
de sortie dans le /etc/php5
répertoire:
php5 grep -r 'mysqli'
apache2/php.ini:; http://php.net/mysqli.max-persistent
apache2/php.ini:mysqli.max_persistent = -1
apache2/php.ini:; http://php.net/mysqli.allow_local_infile
apache2/php.ini:;mysqli.allow_local_infile = On
apache2/php.ini:; http://php.net/mysqli.allow-persistent
apache2/php.ini:mysqli.allow_persistent = On
apache2/php.ini:; http://php.net/mysqli.max-links
apache2/php.ini:mysqli.max_links = -1
apache2/php.ini:; http://php.net/mysqli.cache_size
apache2/php.ini:mysqli.cache_size = 2000
apache2/php.ini:; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
apache2/php.ini:; http://php.net/mysqli.default-port
apache2/php.ini:mysqli.default_port = 3306
apache2/php.ini:; http://php.net/mysqli.default-socket
apache2/php.ini:mysqli.default_socket =
apache2/php.ini:; http://php.net/mysqli.default-host
apache2/php.ini:mysqli.default_host =
apache2/php.ini:; http://php.net/mysqli.default-user
apache2/php.ini:mysqli.default_user =
apache2/php.ini:; Default password for mysqli_connect() (doesn't apply in safe mode).
apache2/php.ini:; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
apache2/php.ini:; http://php.net/mysqli.default-pw
apache2/php.ini:mysqli.default_pw =
apache2/php.ini:mysqli.reconnect = Off
cli/php.ini:; http://php.net/mysqli.max-persistent
cli/php.ini:mysqli.max_persistent = -1
cli/php.ini:; http://php.net/mysqli.allow_local_infile
cli/php.ini:;mysqli.allow_local_infile = On
cli/php.ini:; http://php.net/mysqli.allow-persistent
cli/php.ini:mysqli.allow_persistent = On
cli/php.ini:; http://php.net/mysqli.max-links
cli/php.ini:mysqli.max_links = -1
cli/php.ini:; http://php.net/mysqli.cache_size
cli/php.ini:mysqli.cache_size = 2000
cli/php.ini:; Default port number for mysqli_connect(). If unset, mysqli_connect() will use
cli/php.ini:; http://php.net/mysqli.default-port
cli/php.ini:mysqli.default_port = 3306
cli/php.ini:; http://php.net/mysqli.default-socket
cli/php.ini:mysqli.default_socket =
cli/php.ini:; http://php.net/mysqli.default-host
cli/php.ini:mysqli.default_host =
cli/php.ini:; http://php.net/mysqli.default-user
cli/php.ini:mysqli.default_user =
cli/php.ini:; Default password for mysqli_connect() (doesn't apply in safe mode).
cli/php.ini:; *Any* user with PHP access can run 'echo get_cfg_var("mysqli.default_pw")
cli/php.ini:; http://php.net/mysqli.default-pw
cli/php.ini:mysqli.default_pw =
cli/php.ini:mysqli.reconnect = Off
- Première étape: Activer le rapport d'erreurs.
- maintenant, la page php que j'ai frappé lit:
Fatal error: Call to undefined function mysqli_connect() in /var/www/php-mysql/insert_user.php on line 5
Vous devez vous connecter pour publier un commentaire.
Comment au sujet de la mysqli section de
phpinfo()
? Est-il un? Je soupçonne que vous devez installer le php5-mysql packgage. Je le vois lorsque ce package est installé:[MySQLi]
section et tous les paramètres, il semble logique après avoir lu à travers eux. Son des choses simples comme port par défaut et max de temps en temps.sudo apt-get install php5-mysql
installé un nouveau paquet. Après un redémarrage, frapper la page PHP ajouté le record! Merci beaucoup!