INNER JOIN语句中的错误

时间:2012-02-06 16:43:19

标签: php mysql inner-join

我正在尝试编写INNER JOIN查询。我想获得两个不同表中的行/信息。这是我正在尝试的:

表名是:Students和main_table

$sql =mysql_query ("SELECT main_table.maric_no, main_table.academic_session, main_table.semester, 
main_table.course_name, main_table.total, students.first_name, students.last_name, 
students.other_name, students.level 
FROM main_table INNER JOIN students ON 
main_table.matric_no = students.matric_no 
WHERE main_table.matric = mysql_real_escape_string($_POST[matric_no]'"); 

$number_cols = mysql_num_fields($sql); 

以下是错误消息:

ERROR: mysql_num_fields() expects parameter 1 to be resource, boolean given in c:\filepath on line Number..

问题可能来自哪里?

6 个答案:

答案 0 :(得分:4)

http://php.net/manual/en/function.mysql-num-fields.php

您需要将查询结果传递给mysql_num_fields,而不是SQL字符串。尝试:

$res = mysql_query($sql);
$number_cols = mysql_num_fields($res);

答案 1 :(得分:1)

如果有错误,

mysql_query返回false,因此布尔结果而不是资源。 试试这个

$sql =mysql_query ("SELECT main_table.maric_no, main_table.academic_session, main_table.semester, 
main_table.course_name, main_table.total, students.first_name, students.last_name, 
students.other_name, students.level 
FROM main_table INNER JOIN students ON 
main_table.matric_no = students.matric_no 
WHERE main_table.matric = '".mysql_real_escape_string($_POST[matric_no])."'"); 

答案 2 :(得分:1)

乍一看有两个错误:

  1. mysql_real_escape_string()是一个php函数,而不是一个mysql函数。在mysql查询中使用它之前,它用于使数据更安全。
  2. 您的$ _POST变量未正确分配。
  3. 将其格式化为:

    $sql = mysql_query("
        SELECT M.maric_no, M.academic_session,  
            M.semester, M.course_name, M.total, 
            S.first_name, S.last_name, 
            S.other_name, S.level 
        FROM main_table M 
        INNER JOIN students S ON M.matric_no = S.matric_no 
        WHERE M.matric = '"
        .mysql_real_escape_string($_POST['matric_no'])
        ."'"); 
    

    我冒昧地在表名中添加别名,这会清理你的SQL语句。

    可能还有其他错误(错误的字段,你的WHERE语句真的在字段main_table.matric而不是main_table.matric_no吗?),但是为了分析这个你需要提供有关表格的更多详细信息。

答案 3 :(得分:1)

mysql_real_escape_string($_POST[matric_no]

你不能在双引号字符串中使用这样的函数调用。

"WHERE main_table.matric = '" . mysql_real_escape_string($_POST[matric_no]) . "'");

应该看起来像:

$sql = mysql_query ("SELECT main_table.maric_no, main_table.academic_session, main_table.semester, 
main_table.course_name, main_table.total, students.first_name, students.last_name, 
students.other_name, students.level 
FROM main_table INNER JOIN students ON 
main_table.matric_no = students.matric_no 
WHERE main_table.matric = ". mysql_real_escape_string($_POST[matric_no]) . "'"); 

答案 4 :(得分:1)

mysql_query()在失败并返回错误时返回布尔值False。由于SQL中存在错误,$sql等于False

mysql_num_fields()希望您传入结果集,而不是布尔值,因此错误:ERROR: mysql_num_fields() expects parameter 1 to be resource, boolean given

您在查询中直接包含mysql_real_escape_string(),这是一个PHP函数。而不是:

"WHERE main_table.matric = mysql_real_escape_string($_POST[matric_no]'");"

尝试更类似的内容,假设matric是一个数字:

"WHERE main_table.matric = ". mysql_real_escape_string($_POST[matric_no]);

在PHP中使用mysql_error()函数来查看MySQL在SQL中所说的错误。

答案 5 :(得分:0)

您需要先运行查询。

$result = mysql_query($sql);
$num_cols = mysql_num_fields($result);