0

I have function that performs a mysql_query() and then does some other stuff. I want to be able to perform another mysql_query() only if the first one succeeds.

Here is the function

function myFunction($qtext)
{
  mysql_query($qtext) or die(mysql_error() . "\n");
  //do some more stuff
  return true;
}

I'm calling the function and attempting to check if it failed with an if else conditional...

if(!myFunction($query_text))
{
  echo "first query failed";
}
else
{
  mysql_query($query_text1) or die (mysql_error() . "\n");
}

This seems to work when the first query passes, but if the first query fails it goes to the or die and returns the mysql_error() text and the echo "first query failed"; line in the conditional is never reached.

Ideally id like to be able to alert the user with the mysql_error text but without or dieing, so I can run more code in the conditional.

Any help with explanations of behavior is greatly appreciated. Thanks.

p.s. I'm a beginner... I'm not sure if Im using the return true; properly in the function

4

3 回答 3

4

你总是在函数中返回——如果你在语句中检查它,你true也需要返回。falseif()

function myFunction($qtext) {

    // run the query
    $sql = mysql_query($qtext);

    // see if there was a result (or whatever you're checking)
    if(mysql_num_rows($sql) > 0) {
        // do some more stuff
        return true;
    } else {
        return false;
    }
}

另外,你真的应该学习mysqliorPOD而不是mysql,因为mysql已贬值。我还建议您不要使用die(),除非您正在测试。而是构建一个错误处理函数 - 它实际上非常简单,并且会优雅地处理错误,而不是突然杀死脚本并让您的用户烦恼。您也不希望将错误消息直接打印到浏览器,因为这会危及您网站的安全性。:)

仅供参考:我使用数据库类并像这样运行我的查询。它又快又干净。

if($db->get_results("SELECT email FROM users WHERE email='".$db->escape($email)."'")) {
    return true;
} else{
    return false;
}
于 2013-09-07T17:45:55.330 回答
0

为了防止“或死”的发生,将其替换为 return false:

function myFunction($qtext)
{
    $result = mysql_query($qtext);
    if ($result === false)
    {
        return false;
    }
    //do some more stuff
    return true;
}

这样,您以后的检查将起作用并且条件将触发。您不必使用“或死亡”,这是为您想要停止所有执行的情况保留的。

于 2013-09-07T17:50:40.210 回答
0

die()立即杀死脚本。如果您die()在其中调用该函数将永远不会返回任何值,您将永远无法执行其他查询。只有实例对象的析构函数在调用后仍然运行die(),并且有一些限制。

如果您希望在查询失败后能够继续执行操作,则绝不能调用die(). 相反,只需检查是否按照Tim的建议mysql_query()返回。请注意操作员,这对此处进行正确的错误检查很重要。FALSE===

如果您仍然想打印错误die(),请使用print() orecho代替。

于 2013-09-07T18:11:59.463 回答