INNER JOIN语句出错


error in INNER JOIN statement

我正在尝试编写一个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..

问题从哪里来?

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. mysql_real_eescape_string()是一个php函数,而不是mysql函数。它用于在mysql查询中使用数据之前使数据更安全
  2. 您的$_POST-变量分配不正确

格式如下:

$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上吗?),但为了分析这一点,您需要提供有关表的更多详细信息。

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])."'"); 
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]) . "'"); 

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中显示的错误是什么。

您需要首先运行查询。

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