mysql_fetch_assoc()期望参数1是资源

时间:2013-10-10 00:31:07

标签: php

运行以下查询时发生以下错误:

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;
    }
}

2 个答案:

答案 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)

您无法混合使用mysqlmysqli扩展名。如果您使用mysqli_query,则必须使用mysqli_fetch_assoc,而不是mysql_fetch_assoc