0

我正在制作一个小型 PHP 应用程序,它使用一些数据来检查它是否与数据库的记录匹配(登录过程的原型),但它给了我一个(额外的垃圾数据错误)并且在评论标题行时检查错误,它给了我致命的错误:

致命错误:第 22 行 C:\wamp\www\hh\login.php 中的最大执行时间超过 30 秒

编码:

<?php

header("Content-type: text/xml");

$host = "localhost";
$user = "muhammed";
$pass = "";
$database = "test";

$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");

$query = "SELECT * FROM info";
$resultID = mysql_query($query, $linkID) or die("Data not found.");

$name = "tahany";
$age  = 90;

while(true){
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
    $row = mysql_fetch_assoc($resultID);
    if ($row['Name'] == $name && $row['age'] == $age){
        $res = "login success";
        break;
    }else{
        $res = "failed to login";
    }
}
}

echo $res;

?>
4

5 回答 5

2

你需要优化你的代码,不需要额外的for loop.

while($row=mysql_fetch_assoc($resultID)){
    if ($row['Name'] == $name && $row['age'] == $age){
        $res = "login success";
    }else{
        $res = "failed to login";
    }
}


注意: mysql_*功能已弃用,请mysqli_*尽快移至功能上。

于 2013-11-06T08:54:22.477 回答
1
You getting fatal error because of infinite loop you are putting break in inner loop but outer loop is infinite.
于 2013-11-06T08:54:33.533 回答
1

您可以(并且应该)while (true)从代码中删除该语句。它不是必需的。这就是导致您超时的原因。该break语句仅中断内部循环for而不是外部while循环。

现在,while 循环的修复可能是这样的:

$break_loop = false;
while (!$break_loop ) {
    // Keep your existing code as-is.
    for (...) {
        if (...) {
            ...
        } else {
            ...
        }
    }

    // Always break the loop, whether or not the log-in was successful. 
    // We need to stop the while-loop anyhow.
    //
    // When the log-in was successful, we jumped out of the for-loop much
    // sooner.
    $break_loop = true;
}

所以我们使用一个临时变量来保持循环运行,直到变量设置为true. 当我们for在登录成功或所有尝试都失败时跳出 -loop 时会发生这种情况。

但同样,while不需要 -loop 因为您的for-loop 已经处理了它。

于 2013-11-06T08:56:40.827 回答
1

使用此代码不好,但它很有用 break 2;

http://php.net/manual/en/control-structures.break.php

于 2013-11-06T09:01:28.583 回答
0

如果需要增加 PHP Script 的超时时间。做这个

<?php
set_time_limit(0);

实际问题出在您的 while 循环中。

您的while循环在无限条件下运行。尝试更改它,如 . 永远记住while(true)无限运行。

$i=0;
while($i==0){
for($x = 0 ; $x < mysql_num_rows($resultID) ; $x++){
    $row = mysql_fetch_assoc($resultID);
    if ($row['Name'] == $name && $row['age'] == $age){
        $res = "login success";
        break;
    }else{
        $res = "failed to login";
    }
}
$i=1; // Changing the flag to 1 , so while condition fails
}
于 2013-11-06T08:54:01.453 回答