PHP的mysqli()不工作 [英] PHP mysqli() not working

查看:1455
本文介绍了PHP的mysqli()不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

要开始,我是新来的PHP,这是我的计算器上的第一篇文章。
我试图用mysqli_connect()写一个记录到用户表中测试数据库。
在MySQL客户端,我可以添加一条记录的命令:

INSERT INTO用户VALUES('身份证','铁匠','乔','joepass');

据我可以理解,下面的PHP页面应该增加张三当它在浏览器中被击中users表:

 < PHP
回声PHP的开始;$ CON = mysqli_connect(localhost的根,rootpass,DB_NAME);//检查连接
如果(mysqli_connect_errno())
  {
  回声无法连接到MySQL:。 mysqli_connect_error();
  }mysqli_query($ CON,INSERT INTO用户VALUES('身份证','铁匠','乔','joepass'));mysqli_close($ CON);回声php结束;
?>

但是,当我去这个页面在浏览器中,我看到的是文本PHP开始,这是第一个echo语句。我希望看到写着php结束的可能。当我检查的MySQL客户端的用户表中我没有看到新的记录。此外,当我打开与 PHP -a php的交互shell ,然后运行命令 mysqli_connect(); 的响应 PHP致命错误:调用未定义的函数mysql_connect()函数在PHP外壳code第1行

这使我相信,mysqli_connect未安装或在php.ini配置正确,但我没有的php.ini中的好足够的认识来解决得非常好。另外,我有一个phpinfo()函数test.php的页面。在信用的phpinfo表()我看到了下面几行:

  MySQL驱动程序为PDO乔治Schlossnagle,WEZ福隆,伊利亚Alshanetsky,约翰内斯的Schlüeter
库MySQLi扎克Greant,乔治·里希特,安德烈·赫里斯托夫,乌尔夫·温德尔
MySQLnd安德烈·赫里斯托夫,乌尔夫德尔,乔治·里希特,约翰内斯的Schlüeter
MySQL的兹夫Suraski,扎克Greant,乔治·里希特,安德烈·赫里斯托夫

要这个Ubuntu的服务器上安装了PHP,Apache和MySQL,我已经运行的命令是:

 命令和apt-get安装的Apache2
sudo易于得到安装PHP5
sudo易于得到安装mysql服务器
sudo易于得到安装mysql客户端
sudo易于得到安装PHP5-CLI

和唯一的额外配置我已经做到了我所记得的是添加几个文件名到的Apache2 / MODS的可用/ dir.conf 的DirectoryIndex 来自动打开某些文件名。

有没有需要做的可以使用的功能之前,任何的mysqli 配置?

此外,这是一个AWS服务器,但我没有看到怎么可能有任何网络问题的'localhost'...:P

我也将包括在的/ etc / PHP5 目录的grep -r'mysqli的输出:

  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 =开
的Apache2 / php.ini中:; http://php.net/mysqli.allow-persistent
的Apache2 / php.ini中:mysqli.allow_persistent =开
的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中:;对于mysqli_connect默认端口号()。如果不设置,mysqli_connect()将使用
的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中:;对于mysqli_connect默认密码()(未在安全模式下使用)。
的Apache2 / php.ini中:; *任何*可以使用PHP访问的用户可以运行回声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 =关闭
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 =开
CLI / php.ini中:; http://php.net/mysqli.allow-persistent
CLI / php.ini中:mysqli.allow_persistent =开
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中:;对于mysqli_connect默认端口号()。如果不设置,mysqli_connect()将使用
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中:;对于mysqli_connect默认密码()(未在安全模式下使用)。
CLI / php.ini中:; *任何*可以使用PHP访问的用户可以运行回声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 =关闭


解决方案

如何的mysqli的部分的​​phpinfo()?有一?我怀疑你需要安装PHP5-MySQL的packgage。我认为这是在安装该软件包:

 〜$猫/etc/php5/conf.d/mysqli.ini
;对于PHP的MySQL模块配置
延长= mysqli.so

To start, I am new to PHP, and this is my first post on stackoverflow. I am trying to use mysqli_connect() to write a record to a users table in a test database. In mysql-client I can add a record with the command:

INSERT INTO users VALUES ( 'id' , 'smith' , 'joe' , 'joepass' );

As far as I can understand, the following .php page should add joe smith to the users table when it is hit in a browser:

<?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";
?>

But when I go to this page in a browser, all I see is the text "php start" which is the first echo statement. I would expect to see the words "php end" as well. When I check the users table in mysql client I see no new record. Also when I open the php interactive shell with php -a and run the command mysqli_connect(); the response is PHP Fatal error: Call to undefined function mysql_connect() in php shell code on line 1.

This leads me to believe that mysqli_connect is not installed or configured properly in php.ini, but I dont have a good enough understanding of php.ini to troubleshoot very well. Also, I have a phpinfo() test.php page. In the "Credits" table of phpinfo() I see the following lines:

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

To install php, apache, and mysql on this Ubuntu server, the commands I have run are:

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

and the only additional configuration I have done that I can remember is adding a couple of file names to the apache2/mods-available/dir.conf line DirectoryIndex to open certain file names automatically.

Is there any mysqli configuration that needs to be done before the functions can be used?

Also, this is an AWS server, but I dont see how there could be any networking problem to 'localhost'... :P

I will also include a grep -r 'mysqli' output in the /etc/php5 directory:

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

解决方案

How about the mysqli section of phpinfo()? Is there one? I suspect you need to install the php5-mysql packgage. I see this when that package is installed:

~$ cat /etc/php5/conf.d/mysqli.ini 
; configuration for php MySQL module
extension=mysqli.so

这篇关于PHP的mysqli()不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆