WAMP:尝试连接到 mysql 时“不知道这样的主机”

Posted

技术标签:

【中文标题】WAMP:尝试连接到 mysql 时“不知道这样的主机”【英文标题】:WAMP: 'No such host is known' when trying to connect to mysql 【发布时间】:2013-06-08 04:38:43 【问题描述】:

我收到了这个错误:

Warning: PDO::__construct() [<a href='pdo.--construct'>pdo.--construct</a>]: [2002] php_network_getaddresses: getaddrinfo failed: No such host is known. (trying to connect via tcp://1:3306) in Z:\work\...

我的 localhost/phpmyadmin 工作正常,但我无法访问 localhost 或 127.0.0.1 ,我得到一个空白页面“禁止访问:您无权访问此服务器上的 /。”

我的 80 端口上没有其他东西在运行

我修改了我的 httpd.conf

DocumentRoot "z:/work/"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "z:/work/">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from all
</Directory>

还添加到我的 httpd-vhosts.conf 中

<Directory C:/Users/Alex/Documents/GitHub>
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>

<Directory Z:/work>
Order Deny,Allow   
Allow from all 
AllowOverride All
</Directory>

<VirtualHost *:80>
    DocumentRoot "Z:\work\mysite"
    ServerName bullseye.local
</VirtualHost>

<VirtualHost *:80>   
DocumentRoot "C:\Users\Alex\Documents\GitHub\Myproject" 
ServerName framework.local 
</VirtualHost>

我的 phpmyadmin.conf 如下

Alias /phpmyadmin "c:/wamp/apps/phpmyadmin3.5.1/" 

<Directory "c:/wamp/apps/phpmyadmin3.5.1/">
Options Indexes FollowSymLinks MultiViews
AllowOverride all
    Order Deny,Allow
Deny from all
Allow from all
</Directory>

给出错误的代码:

$host = 'localhost';
$user = 'root';
$pass = '';
$database = 'mydatabase';
$this->db = new PDO('mysql:dbname=' . $database . ';host=' .$host . ';charset=utf8', $user, $pass);

我使用 mysql 或 msqli 而不是 PDO 得到了同样的错误

【问题讨论】:

phpMyAdmin 只是一个客户端程序,它与 mySQL 服务器的运行位置无关。你能展示一下你使用什么代码来连接数据库,你真的有一个在 localhost 上运行的数据库服务器吗? 是的,我的 localhost 上有一个数据库(通过 localhost/phpmyadmin 创建)如果我尝试通过 mysql 或 PDO 连接,我会遇到同样的错误,我是 currenylu 使用这个:$this->db = new PDO('mysql:dbname=' . $database . ';host=' .$host . ';charset=utf8', $user, $pass);其中主机 = 'localhost' 用户 = 'root' 和密码 = '' 您是否 100% 确定按照您展示的方式进行操作?因为PHP - Variables not replaced in PDO connection string 100% 确定,如果我使用 $this->db = new PDO('mysql:dbname=mydatabase;host=localhost;charset=utf8', 'root', ''); 【参考方案1】:

我的建议是:

撤消对 httpd.conf 的所有更改。您的更改已删除 Apache 对 WAMP 主页(即 localhost)的所有知识。 注释掉虚拟主机配置的包含并检查您是否可以再次访问 WAMP 主页。

确保 WAMP 处于“离线”状态,这将保证 C:\ 驱动器和 c:\wamp 文件夹的安全。

现在到您的虚拟主机定义:

为了保持 wamp 主页正常工作,第一个条目应如下所示,注意 Directory 块应该是 VirtualHost 定义的一部分,并且安全定义确保您只能从 127.0.0.1 访问 wamp 主页(本地主机)

###must be first so the the wamp menu page loads
<VirtualHost *:80>
    ServerAdmin webmaster@homemail.net
    DocumentRoot "D:/wamp/www"
    ServerName localhost
    ServerAlias localhost
    <Directory  "D:/wamp/www">
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
</Directory>
</VirtualHost>

您定义的每个 VHOST 都应包含其自己的安全设置,如下所示

<VirtualHost *:80>
    DocumentRoot "Z:\work\mysite"
    ServerName bullseye.local
    ServerAlias bullseye.local
    AllowOverride All
    <Directory "Z:\work\mysite">
        Order Allow,Deny
        Allow from all 
    </Directory>
</VirtualHost>

<VirtualHost *:80>   
    DocumentRoot "C:\Users\Alex\Documents\GitHub\Myproject" 
    ServerName framework.local 
    ServerAlias www.framework.local
    <Directory "C:\Users\Alex\Documents\GitHub\Myproject">
        Order Allow,Deny
        Allow from all 
    </Directory>
</VirtualHost>

取消注释您的虚拟主机定义的包含在 https.conf 中,然后再次尝试访问您的其他项目。

我假设您已对 c:\windows\system32\drivers\etc\hosts 文件进行了必要的更改,以包含对所有虚拟主机的引用?如果不是,hosts 文件应该如下所示:-

127.0.0.1 本地主机 127.0.0.1 框架.本地 127.0.0.1 靶心.local

【讨论】:

这个,在这个webtrunghieu.info/web/…的帮助下解决了这个问题。谢谢! 请不要使用您在该博客上找到的解决方案,它太危险了。这允许任何设法闯入您的站点的黑客访问您的整个 C 驱动器,并且还允许任何人访问您的 phpMyAdmin,这是一个真正的坏主意,因为那是对您所有数据库的完全访问权限。如果您遇到这个问题,那是因为您的 PC 上有 IPV4 和 IPV6 可用。而是尝试在 httpd.conf 文件中将 'Listen *:80 更改为 Listen 0.0.0.0:80,并替换 c:\wamp 上的拒绝安全性和 phpmyadmin 别名。【参考方案2】:

我担心的是:

DocumentRoot "z:/work/"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>

<Directory "z:/work/">
    Options Indexes FollowSymLinks
    AllowOverride all
    Order Deny,Allow
    Deny from all
    Allow from all
</Directory>

不幸的是,在我建议之前我没有时间对此进行测试...但是如果 DocumentRoot 是 z:/work/ 那么 Directory / 也是 z:/work/ 并且您已将其设置为 deny alloverride none .稍后尝试使用Directory "z:/work/" 更改权限将被视为覆盖,因此不会被应用?我建议您在花太多时间寻找其他可能的解决方案之前尝试将 AllowOverride 更改为 all 或从 / 中删除全部拒绝。

【讨论】:

以上是关于WAMP:尝试连接到 mysql 时“不知道这样的主机”的主要内容,如果未能解决你的问题,请参考以下文章

phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接

wamp mysql无法连接到本地主机

如果 mysql 数据库驻留在 wamp 服务器中,如何将 django 项目连接到 mysql 数据库?

php连接到本地数据库与wamp [关闭]

从 JAVA(eclipse)连接到 MySQL(wamp 服务器)时出现“文件名、目录名或卷标语法不正确”错误

尝试连接到 localhost phpmyadmin 时出现错误