【问题标题】:mysql_connect() causes page to not display (WAMP)mysql_connect() 导致页面不显示 (WAMP)
【发布时间】:2010-04-14 19:43:12
【问题描述】:

我目前有一个运行 MySQL 和 PHP 的网站,这一切都在其中工作。我已经尝试安装 WAMPServer 以便能够在我自己的计算机上在该站点上工作,但是我在尝试使该站点正常工作时遇到了问题。

HTML 和 PHP 文件可以正常工作(通过转到 http://localhost/index.php 等)。但是有些页面显示“此网页不可用”(在 Chrome 中)或“Internet Explorer 无法显示此网页”,这让我认为服务器有错误,当页面不存在时,它通常显示“糟糕!此链接似乎已损坏”或 IE 的标准 404 页面。

我网站中的每个页面都有一个 include() 调用来设置一个类的实例来处理所有数据库事务。此类在其构造函数中打开与数据库的连接。我发现注释掉构造函数的内容将允许页面加载,尽管这可以理解地导致页面稍后出现错误。

这是包含文件的内容:

class dbAccess  {
    private $db;

    function __construct() {
        $this->db = mysql_connect("localhost","root","") or die ("Connection for database not found.");

        mysql_select_db("dbName", $this->db) or die ("Database not selected");
    }
    ...
}

作为这里发生的事情的说明。我正在尝试使用我网站上的数据库,而不是本地机器。当我将 dbName、用户和密码的实际值插入我的数据库软件 (Navicat Lite) 并在站点的最终版本上正常工作时,它们的实际值起作用,所以我认为问题不在于这些值本身,而是Apache 或 Wamp 的一些设置。

这是我尝试登录该站点的 Apache 错误日志的摘录:

[Wed Apr 14 15:32:54 2010] [notice] Parent: child process exited with status 255 -- Restarting.
[Wed Apr 14 15:32:54 2010] [notice] Apache/2.2.11 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Wed Apr 14 15:32:54 2010] [notice] Server built: Dec 10 2008 00:10:06
[Wed Apr 14 15:32:54 2010] [notice] Parent: Created child process 1756
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Child process is running
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Acquired the start mutex.
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Starting 64 worker threads.
[Wed Apr 14 15:32:55 2010] [notice] Child 1756: Starting thread to listen on port 80.

我已尝试在线搜索解决方案,但无法找到任何帮助。如果您需要任何进一步的信息来帮助解决此问题,请随时提出要求。

(另外请注意,我什至在这台计算机上没有 Skype,所以我看不出这是一个问题,因为这种冲突似乎是任何 Wamp 问题的默认响应。)

[编辑:从错误日志中删除条目,因为它已作为无关问题解决] [编辑:查看我的主机文档,我发现除了 80 和 443(用于 HTTP 和 HTTPS)之外的所有端口都被阻止,这意味着它们不允许像我在这里尝试做的那样的外部连接。我已将其更改为本地数据库,但仍然收到相同的错误。问题仍未解决。]

【问题讨论】:

  • 您是否验证过 PHP 正在使用 MySQL 插件?目标远程机器上的 MySQL 端口是默认端口吗?如果是,它是否通过远程系统上可能存在的防火墙正确转发?
  • 感谢您的超级快速回复!我正在使用 Navicat Lite 访问数据库。我在那里使用的连接设置使用端口 3306(我假设这是默认设置),并且连接正常。我假设这意味着防火墙在这里也应该没问题?对于 PHP 扩展,我可以看到 php_mysql 和 php_mysqli 都包含在内。 (我已经通过左键单击 Wampserver > PHP > PHP Extensions 进行了检查,并验证了扩展名已被选中。我正在检查我的防火墙设置,看看是否需要为 Wamp Server 或 Apache 设置例外。
  • 由于这“只是”一个开发/测试环境,您是否在 php.ini 中设置了 error_reporting=E_ALL|E_STRICTdisplay_errors=Ondisplay_startup_errors=On(并通过 phpinfo() 检查了这些值)? (display_ 选项绝对不是必须的,只要您留意错误日志)
  • 我检查了我的防火墙设置,发现 Apache HTTP Server 被列入白名单,没有问题。可以肯定的是,我关闭了防火墙,但我仍然遇到问题。我确实有 Avast 防病毒软件,但没有其他我知道的防火墙。我还尝试了 VolkerK 关于 php.ini 文件的建议。 display_' 选项已经设置好了,不幸的是,切换 error_reporting 并没有改变。我应该注意到 PHP 错误日志中没有任何条目,即使上面有明显的错误,当我通过注释掉那一行进行测试时。
  • 如果你故意放一些类似的东西,你会收到错误/警告消息,例如<?php echo $doesnotexist; 在脚本中?

标签: php mysql wamp


【解决方案1】:

我也遇到过这个问题。我的解决方案是将 mysql_connect 方法从其类中移出并直接调用它。

【讨论】:

    【解决方案2】:

    让我们暂时绕过 apache。在目录 /bin/php/php5.3.0 中有一个实现 cli sapi(命令行版本)的 php.exe。

    将文件 test.php 放在该目录中

    <?php
    if ( !extension_loaded('mysql') ) {
        die('the mysql extension is not present');
    }
    
    echo 'phpversion=', phpversion(), "\n"; flush();
    echo 'client_info=', mysql_get_client_info(), "\n"; flush();
    
    $mysql = mysql_connect('localhost', 'root', '') or die(mysql_error());
    echo "seems to be working\n"; flush();
    
    echo 'server_info=', mysql_get_server_info($mysql), "\n"; flush();
    

    作为内容。然后打开一个命令shell,“转到”目录

    c:
    cd c:\wamp\bin\php\php5.3.0
    

    然后运行

    php.exe -f test.php
    

    它应该打印类似的东西

    phpversion=5.3.2
    client_info=mysqlnd 5.0.7-dev - 091210 - $Revision: 294543 $
    seems to be working
    server_info=5.1.37
    

    (尽管在您的情况下版本会有所不同)

    【讨论】:

    • 前两行出现输出:phpversion=5.3.0 client_info=mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
    • 一段时间后(大约 20 秒),以下警告语句以不同的格式重复了 5 次(我正在调查 2002 错误是什么。):`Warning: mysql_connect(): [2002] 连接尝试失败,因为连接方在第 10 行的 C:\wamp\bin\php\php5.3.0\test.php 中没有(尝试通过 tcp://localhost:3306 连接)
    • MySQL 服务器似乎没有运行。
    • 当我可以运行 Navicat 或 MySQL 查询浏览器并顺利进入它们时,什么会导致 MySQL 服务器失败?
    • 也许他们使用命名管道而不是 tcp 来连接服务器。 MySQL 服务器是否出现在netstat -ab -p tcp 的输出中? (它应该列出所有当前使用的 tcp 端口和“关联”应用程序。可能需要一段时间。)
    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    相关资源
    最近更新 更多