2

我正在运行一个函数来检查用户是否已经提交了问题。我已将问题缩小到运行查询代码的函数。由于某种原因,它不起作用。当涉及 AND user_requester... 的部分不存在时,该功能确实有效。我确定这是某种语法错误,但我没有从错误报告中得到响应。下面是代码:

function question_exists ($question, $user_id) {

$question = sanitize($question);    

$query = mysql_query("SELECT COUNT(`primary_id`) FROM `requests` WHERE 

`question_asked`= '$question' AND `user_requester` = $user_id");

return (mysql_result($query, 0) == 1) ? true : false;

}

澄清:我想防止用户两次提交相同的问题。这就是将 AND 部分添加到查询中的 where 子句的目的。当我添加 AND 部分时,一切都会变得零碎,用户无论如何都可以提交相同的问题。

4

3 回答 3

2

我会尝试分别执行所有步骤,以便您可以单独测试每个操作的结果。您的退货线路正在处理很多事情,因此很难判断您的问题出在哪里。像这样的东西...

function question_exists( $question, $user_id )
{
    $question = sanitize( $question );

    $user_id = (int) $user_id; // additional sanitization in case you didn't do it already.

    $sql = "SELECT COUNT(`primary_id`) FROM `requests` WHERE 
        `question_asked`= '$question' AND `user_requester` = $user_id";
    $result = mysql_query( $sql );
    if ( !$result ) {
       // Note: this would be better sent to an error handling function, this is just for simplicity's sake.
       echo 'Mysql query error: ' . mysql_error();
       exit;
    }

    $row = mysql_fetch_row ( $result );
    if ( $row ) {
        return true;
    } else {
        // temporary debug code
        echo "unknown error</ br>\n";
        echo "sql: " . $sql . "</ br>\n";
        echo "<pre>";
        var_dump( $row );
        echo "</pre>";
        exit();

        // real code for after problem is solved
        return false;
    }
}

如果这仍然没有帮助并且您还没有,请转储您的 $question 和 $user_id 变量以确保您正在接收它们并且您的 sanitize 函数没有做错什么。请注意,我没有运行此代码,因此可能存在语法错误。

于 2012-07-21T06:26:30.637 回答
1

您指的是哪种错误报告?查询失败不会触发任何 PHP 错误/警告。你需要类似的东西

$query = mysql_query(...) or die(mysql_error());

看看到底发生了什么。

于 2012-07-21T05:50:43.747 回答
-1
$query = mysql_query("SELECT COUNT(`primary_id`) FROM `requests` WHERE 

`question_asked`= '$question' AND `user_requester` = {$user_id}");

将大括号添加到查询中的变量。

于 2012-07-21T05:52:43.227 回答