我正在尝试编写一个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);
乍一看有两个错误:
- mysql_real_eescape_string()是一个php函数,而不是mysql函数。它用于在mysql查询中使用数据之前使数据更安全
- 您的$_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);