运行以下查询时发生以下错误:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource
function get_subject_by_id( $subject_id ) {
global $connection;
$query = "SELECT * ";
$query .= "FROM subjects ";
$query .= "WHERE id=" . $subject_id ." ";
$query .= "LIMIT 1";
$result_set = mysqli_query( $connection, $query );
confirm_query( $result_set );
/* @var $subject type */
if ( $subject = mysql_fetch_assoc( $result_set ) ) {
return $subject;
} else {
return NULL;
}
}
答案 0 :(得分:2)
你需要在where子句的输入周围引用,你不能混合使用mysqli和mysql。
function get_subject_by_id($subject_id) {
global $connection;
$query = "SELECT * ";
$query .= "FROM subjects ";
$query .= "WHERE id='" . $subject_id ."' "; //The problem is here, you need quotations around your variable
$query .= "LIMIT 1";
$result_set = mysql_query( $connection, $query ); //Edit: Barmar is right, you can't mix mysqli and mysql
confirm_query($result_set);
/* @var $subject type */
if ($subject == mysql_fetch_assoc($result_set)) {
return $subject;
} else {
return NULL;
}
}
此外,您应该通过mysql_real_escape_string()放置$ subject_id,否则您的代码可能容易受到SQL injection attacks的攻击。
(免责声明)您正在使用的方法和我的建议已经过时,并已在php5.5中折旧。我建议您查看prepared statements。
答案 1 :(得分:1)
您无法混合使用mysql
和mysqli
扩展名。如果您使用mysqli_query
,则必须使用mysqli_fetch_assoc
,而不是mysql_fetch_assoc
。