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
关于这个最糟糕的部分是它在考试期间发生在我身上,这让我非常沮丧,因为它根本没有意义。调试让我失去了很多时间,以至于我无法完成其他简单的部分。
有人能看出为什么这种奇怪的行为发生在这里?
答案 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函数,因为它会抑制任何错误输出;)