wamp服务器不工作?或者糟糕的PHP代码

时间:2010-06-15 13:24:10

标签: php

我有这个PHP代码:

<?php
        $username="root";
        $password="******";// censored out
        $database="bazadedate";
        mysql_connect("127.0.0.1",$username,$password); // i get unknown constant localhost if used instead of the loopback ip 
        @mysql_select_db($database) or die( "Unable to select database");
        $query="SELECT * FROM backup";
        $result=mysql_query($query);
        $num=mysql_numrows($result);

        $i=0;
        $raspuns="";
          while ($i < $num) {
            $data=mysql_result($result,$i,"data");
            $suma=mysql_result($result,$i,"suma");
            $cv=mysql_result($result,$i,"cv");
            $det=mysql_result($result,$i,"detaliu");

            $raspuns = $raspuns."#".$data."#".$suma."#".$cv."#".$det."@";

          $i++;
          }

             echo "<b> $raspuns </b>";

        mysql_close();
?>

它应该返回一个包含表中所有数据的字符串。但它说“加载页面时连接重置”。

日志是:

[Tue Jun 15 16:20:31 2010] [notice] Parent: child process exited with status 255 -- Restarting.
[Tue Jun 15 16:20:31 2010] [notice] Apache/2.2.11 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Tue Jun 15 16:20:31 2010] [notice] Server built: Dec 10 2008 00:10:06
[Tue Jun 15 16:20:31 2010] [notice] Parent: Created child process 2336
[Tue Jun 15 16:20:31 2010] [notice] Child 2336: Child process is running
[Tue Jun 15 16:20:31 2010] [notice] Child 2336: Acquired the start mutex.
[Tue Jun 15 16:20:31 2010] [notice] Child 2336: Starting 64 worker threads.
[Tue Jun 15 16:20:31 2010] [notice] Child 2336: Starting thread to listen on port 80.
[Tue Jun 15 16:20:35 2010] [notice] Parent: child process exited with status 255 -- Restarting.
[Tue Jun 15 16:20:35 2010] [notice] Apache/2.2.11 (Win32) PHP/5.3.0 configured -- resuming normal operations
[Tue Jun 15 16:20:35 2010] [notice] Server built: Dec 10 2008 00:10:06
[Tue Jun 15 16:20:35 2010] [notice] Parent: Created child process 1928
[Tue Jun 15 16:20:35 2010] [notice] Child 1928: Child process is running
[Tue Jun 15 16:20:35 2010] [notice] Child 1928: Acquired the start mutex.
[Tue Jun 15 16:20:35 2010] [notice] Child 1928: Starting 64 worker threads.
[Tue Jun 15 16:20:35 2010] [notice] Child 1928: Starting thread to listen on port 80.

知道为什么它什么都不输出?

4 个答案:

答案 0 :(得分:2)

$num=mysql_numrows($result);

应该是

$num=mysql_num_rows($result);

至少有一个问题。

您还应该查看mysql_fetch_assoc ...

# this will loop through each record
while($row = mysql_fetch_assoc($result)) {
    $data = $row['data'];
    $sum = $row['suma'];
    ....
}

答案 1 :(得分:0)

您需要启用error reporting才能看到正在发生的事情...编辑php.ini,然后设置error_reporting=2147483647display_errors=1。然后再次运行脚本以检查所有错误......

答案 2 :(得分:0)

从日志片段中,有些东西正在杀死处理请求的Apache子进程,导致TCP连接立即关闭,浏览器将其视为“连接重置”。

您可能需要调查使用'localhost'而不是'127.0.0.1'来进行数据库连接。 MySQL以不同于IP地址的方式处理“localhost”,并尝试通过套接字而不是TCP连接进行连接 - 这是一种速度优化,因为本地套接字比TCP套接字更快。您的MySQL安装可能没有侦听TCP连接(skip_networking = 1)。

同样,您不应该以root帐户身份连接到您的数据库,特别是如果这是一个面向公众的网站。 root帐户可以访问任何东西并在MySQL中执行任何操作,这不是您想要向世界公开的内容。阅读GRANT syntax并创建一个具有有限权限的MySQL帐户并使用它。很可能您的网站只需要插入/更新/选择/删除。

除此之外,更改查询获取逻辑以使用上面提到的Lizard,并开始进行一些调试 - 找出导致错误的行,以及到达那里需要多少次迭代。你可能会耗尽某种杀死Apache / PHP的资源。

答案 3 :(得分:0)

我多次遇到此错误,我的解决方案是增加apache二进制文件(apache.exe或httpd.exe)堆栈大小。您将需要Visual Studio来执行此操作,但您可以像我一样使用试用版。你甚至不需要打开它。命令是:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64>editbin /STACK:8000000 "c:\Program Files (x86)\WAMP\apache\bin\apache.exe"

根据您的环境改变上述路径。

在Visual Studio目录VC / binary /中有几个名为editbin.exe的实用程序。使用适合您的平台或逐个尝试,直到它工作(如我所做)。