PHP: Unknown MySQL server host with mysqli
我有以下代码:
1 2 3 4 5 6
| $username = 'username';
$password = 'password';
$host = 'localhost';
$db = 'dbname';
$dbh = new mysqli ('p:'.$host, $username, $password, $db)
or die('no connection to server'); |
但是我收到以下错误
1
| PHP Warning : mysqli ::mysqli() [function.mysqli -mysqli ]: (HY000 /2005): Unknown MySQL server host 'p:localhost' (1) in /var/www /vhosts /politiker .lu /httpdocs /includes /sql .php on line 8 |
这让我很感兴趣,因为在我的开发环境中使用了完全相同的代码。 现在,我想在生产服务器上进行设置,但是它不起作用。 有任何想法吗?
注意:我对服务器不是很好,所以如果错误不重要,请原谅。
编辑1
这些是版本:
开发PHP(5.3.3-1ubuntu9.1)+ MySQL(5.1.49-1ubuntu8.1)
生产PHP(5.2.4-2ubuntu5.12)+ MySQL(5.0.51a)
-
在这两种环境中,您的PHP和/或mysqli版本可能不同吗? 生产服务器上的版本可能不支持持久连接?
-
如果只删除p:部分怎么办?
像这样取出p::
1 2
| $dbh = new mysqli ($host, $username, $password, $db)
or die('no connection to server'); |
-
p:应该表示持久连接。
-
我确实尝试过删除持久连接。但是,出现以下错误"没有注册root @ localhost。这更加奇怪,因为我从未要求过root用户。
-
因此,然后将其连接到mysql,多数民众赞成在进步! =]
-
您是否要调用存储过程?
-
还是创建一个存储过程?这可能是一个定义者问题
-
@superfro:是的。我正在尝试与此新的东西。我的设置仅允许用户执行存储过程。来宾无法访问的第二个用户名用于执行更严格的SQL工作。
-
如果设置了定义器,请检查该过程;如果设置了定义器,则尝试以该用户身份执行,除非将sql_security更改为调用者,这可能是导致该错误的原因。但是取出p:现在让您连接到mysql正确了吗?
-
@superfro:您对此是正确的。对于开发和生产系统,我有不同的管理员名称。为什么Plesk会使用我不知道的用户名...好吧,现在似乎在没有持久连接的情况下也可以使用。
只是添加了这个,因为我认为不清楚,但是问题绝对是您的PHP生产版本。直到5.3才添加mysqli扩展的持久连接,因为它们以前引起了麻烦。
有些主机可能安装了不同版本的PHP ...今天我意识到我可以让HostGator使用PHP 5.3!我只需要添加到我的.htaccess文件中:
1 2
| Action application/x-hg-php53 /cgi-sys/php53
AddType application/x-hg-php53 .php |
我认为您错过了此服务器中的mysqli软件包。尝试:
1
| sudo apt-get install php5-mysqli |
如果apt-get表示已安装,请尝试对localhost执行ping操作,如果不解决,请编辑/ etc / hosts并检查localhost指向127.0.0.1的行
应该在那儿,如果没有的话,那么您的服务器将被可怕地配置!
做一个
并检查是否得到这样的输出...
1 2
| lo Link encap :Local Loopback
inet addr :127 .0 .0 .1 Mask :255 .0 .0 .0 |
-
试过了。它说:"以下软件包代替了它:php5-mysql"。该软件包,我已经安装了。
-
还尝试127.0.0.1而不是localhost ...您得到相同的错误?
-
我犯了同样的错误。它似乎只影响持久连接,因为一旦删除p :,它就会按预期工作。
-
因此,我建议不要使用两年前进行基准测试的持久性连接,使用p连接不会有明显的效益。
-
我发现了这篇文章:似乎mysqli中的持久连接已禁用。 mysqlperformanceblog.com/2006/11/12/
您需要指定MySQL服务器的实际位置。对于开发,它是localhost(最有可能),与配置方式相同。但是对于生产服务器,这将是另外一回事。我怀疑应该是localhost。
-
"未知的MySQL服务器主机"-您还能猜到什么呢?
-
我拥有一个虚拟服务器。我实际上已经启动并运行了Mysql Workbench(查询浏览器和管理界面),并通过ssh使用TCP / IP进行了运行,而ssh又连接到了本地主机。
-
@SimpleCoder我正在尝试学习。我通常将这些东西留给知道如何使用它的人,但是在这种情况下,我需要可以控制自己的东西。
-
@麦克风;哇对不起有一秒钟,我以为你和OP是两个不同的人。我希望我没有冒犯你。
-
您是否使用MySQL Workbench连接到开发服务器或生产服务器?
-
@SimpleCoder:我都在跑步。全部在默认端口上,没什么花哨的。