这句话在句法上是否正确:
$query = "SELECT matric_no session course_name
FROM main_table session
WHERE main_table.matric_no = '$_POST[matric_no]'
AND session.session_name = '$_SESSION[session]'
AND session.course_name = '$_SESSION[course_name]'";
$result = mysql_query($query) ;
$duplicates = mysql_num_rows($result);
if ($duplicates = 1) {
echo "you have dis in the database";
};
答案 0 :(得分:2)
您不需要 SELECT 中的所有信息来检查会话是否在数据库中。
$matricNo = $_POST[matric_no];
$sessionName = $_ SESSION[session];
$courseName = $_ SESSION[course_name];
//here you should use mysql_real_escape_string() for security
//like this $matricNo = mysql_real_escape_string($matricNo);
$query = "SELECT m.matric_no
FROM main_table as m, session as s
WHERE m.matric_no = '$matricNo'
AND s.session_name = '$sessionName'
AND s.course_name = '$courseName'";
$result = mysql_query($query) or die (mysql_error());
$duplicates = mysql_num_rows($result);
if ($duplicates > 0) {
echo "you have dis in the database";
};
答案 1 :(得分:2)
有三个问题:
1)在select语句中缺少逗号(已经指出)
2)解决了第一个问题后,它应生成笛卡尔积,因为您没有在两个表之间连接。你应该有这样的东西:
SELECT
m.matric_no,
s.course_name
FROM
main_table mt,
session s
WHERE
mt.[SOMECOLUMN] = s.[ANOTHERCOLUMN]
AND mt.matric_no = '$_POST[matric_no]'
AND s.session_name = '$_SESSION[session]'
AND s.course_name = '$_SESSION[course_name]'"
或(如果支持ANSI样式的连接):
SELECT
m.matric_no,
s.course_name
FROM
main_table mt
JOIN
session s ON (mt.[SOMECOLUMN] = s.[ANOTHERCOLUMN])
WHERE
mt.matric_no = '$_POST[matric_no]'
AND s.session_name = '$_SESSION[session]'
AND s.course_name = '$_SESSION[course_name]'"
3)查询对SQL注入攻击开放。绝不传递变量而不先清理变量(至少可以由用户更改的变量)。如果可能的话,使用查询参数来处理问题。如果这不是一个选项,只需通过删除可用于更改查询的单引号等字符来清理变量。自从我使用MySQL以来已经有一段时间了,所以也许有一些我不知道的魔法可以为你解决这个问题,但我不知道这是怎么回事。更新:hafichuk建议做什么: - )
答案 2 :(得分:0)
不应该是:
$query = "SELECT main_table.matric_no, session.course_name
希望有所帮助
答案 3 :(得分:0)
您的查询中存在一些语法问题
如果main_table和session是两个不同的表,那么它应该是这样的。
"SELECT main_table.matric_no, session.course_name
FROM main_table, session
WHERE main_table.matric_no = '$_POST[matric_no]'
AND session.session_name = '$_SESSION[session]'
AND session.course_name = '$_SESSION[course_name]'"
答案 4 :(得分:0)
您需要认真重新考虑的一件事是使用来自$_POST
和$_SESSION
的未经过抽样的数据。这可能会对您的网站造成重大安全风险,因为有人可以轻松地执行某些SQL Injection。
至少应该使用mysql_real_escape_string()
。
我还会考虑迁移你的代码以使用mysqli或PDO,因为mysql已经过时了。