我有这个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.
知道为什么它什么都不输出?
答案 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=2147483647
和display_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的实用程序。使用适合您的平台或逐个尝试,直到它工作(如我所做)。