2012-07-21 60 views
2

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

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部分时,所有东西都会变成碎片,用户可以提交相同的问题。

+1

为什么你在$ question周围有引号而没有在$ user_id附近? – 2012-07-21 06:16:34

+0

当它被插入到数据库中时,是否使用相同的函数(sanitize $ var)来清理问题?尽量不要审问$问题,看看question_exists是否有效 – 2012-07-21 06:18:40

+0

是的,它在进入数据库时​​已经过了消毒。 – jason328 2012-07-21 06:21:13

回答

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; 
    } 
} 

如果仍然没有帮助,你有没有准备好,转储$问题和$ user_ID的增值经销商,以确保您收到他们,你的sanitize功能不做错事。请注意,我没有运行此代码,因此可能会出现语法错误。

+0

我现在就会穿过它。让你在5-10分钟内知道结果。 – jason328 2012-07-21 06:33:57

+0

感谢您的帮助。我认为$ user_id =(int)$ user_id;工作。 – jason328 2012-07-21 06:46:57

1

你指的是什么类型的错误报告?查询失败不会触发任何PHP错误/警告。你需要像

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

看看究竟发生了什么。

+0

我这样做,它没有返回任何错误。 – jason328 2012-07-21 05:58:50

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

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

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

+0

感谢您的帮助,但它没有奏效。 – jason328 2012-07-21 05:58:37

+0

只有在某些可能会使解析器混淆的情况下才需要大括号。 '$ a ='x';回声“$ ab”'。在这里拍他们不会改变什么,因为变量不能混淆。 – 2012-07-21 05:59:39

+0

@ jason328你能告诉我们什么是错误? – 2012-07-21 05:59:55