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