简单的查询错误

时间:2012-07-21 05:47:53

标签: php sql

我正在运行一个检查用户是否已提交问题的函数。我已将问题缩小到运行查询代码的函数。由于某种原因,它无法正常工作。当涉及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部分时,一切都会变成碎片,用户无论如何都可以提交相同的问题。

3 个答案:

答案 0 :(得分: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 vars以确保你收到它们并且你的清理功能没有做错误的事情。注意,我没有运行此代码,因此可能存在语法错误。

答案 1 :(得分:1)

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

这样的东西
$query = mysql_query(...) or die(mysql_error());

看看到底发生了什么。

答案 2 :(得分:-1)

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

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

在查询中为您的变量添加花括号。