我正在尝试编写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..
问题可能来自哪里?
答案 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)
乍一看有两个错误:
将其格式化为:
$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);