php脚本在一个简单的return语句后停止

时间:2012-01-28 17:55:59

标签: php return

Hello其他程序员,

如果登录已经存在然后返回true或false,我已经创建了一个查找数据库的函数,这里是这个函数的主体:

public static function loginExiste($login)
{
    $cnx = new GestionBD("localhost", "fnak", "root", "");

    $login = mysql_real_escape_string($login);

    $ret = $cnx->execRequete("SELECT COUNT(*) FROM clients WHERE Client_Login = '".$login."'");

    $col = mysql_fetch_array($ret);
    echo 2;
    if ($col[0] > 0)
    {
        echo 3;
        return true;
    }
    else
    {
        echo 4;
        return false;
    }
}

以下是我如何调用此函数:

echo 1;
if (!ExecRequete::loginExiste($_POST['login']))
{
    echo 5;
    /*
    echo '<center><p style="color:red;">
                Erreur: Login existe déjà
            </p></center>';
    exit();
    */
}
echo 6;

现在你可以看到,我散布了一些回声声明,看看执行是如何流动的。我每次得到的结果是:

如果登录存在:123 如果它不存在:124

从结果中我看到脚本在return语句之后立即停止执行。通常它应该是这样的:

1236或12456

关于这个最糟糕的部分是它在考试期间发生在我身上,这让我非常沮丧,因为它根本没有意义。调试让我失去了很多时间,以至于我无法完成其他简单的部分。

有人能看出为什么这种奇怪的行为发生在这里?

1 个答案:

答案 0 :(得分:2)

最后!我得到的错误是^^

从头开始重新启动函数(比如使用 if($ login ==“a”)返回true; )我发现问题出在我的GestionBD类的析构函数中处理与mysql的连接。因为函数中的所有代码都工作,除了在return语句的最后。

是什么让我确定它是析构函数,是我在 echo 2; 之前放入 $ cnx = null; 并且在echo之前停止执行。然后我注释掉了析构函数,一切都按需要运行。但我想知道我的析构函数有什么问题......

以下是它的外观:

function __destruct()
{
    @mysql_close($this->$connexion);
}

现在,如果有人熟悉PHP中的OOP,他会立即发现错误..变量connexion是类中的成员变量。因此,当我们用指针$ this引用它时,我们需要把它放在没有$的地方(啊,我讨厌你,我要么忘记你,要么在你不需要的时候放弃:/)

正确的析构函数是:

function __destruct()
{
    @mysql_close($this->connexion);
}

但是这个mysql_close函数当然不是很好,它没有给出任何错误信息,没有任何异常,它只是让引擎崩溃并让你想知道为什么......

感谢大家的回答和帮助,非常感谢:)并且对每个人的建议是,如果您在简单的返回true时收到任何奇怪的行为或错误消息; 检查您当地的所有信息对象的析构函数......它们可能有罪,并且 USE PDO 在调试时不使用@和mysql函数,因为它会抑制任何错误输出;)