2013-10-10 53 views
-2

当我运行下面的查询会出现以下错误:mysql_fetch_assoc()预计参数1是资源

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

请参阅[本答案](http://stackoverflow.com/a/11674313/250259)了解如何解决此问题。 –

+0

@tepkenvannkorn您不应该按照您认为合适的方式“修改”代码进行编辑。一般的经验法则。 –

+0

首先,如果你想做一个比较,那么这个'if($ subject = mysql_fetch_assoc($ result_set)){'应该有两个等号。 –

回答

1

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

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

你也应该把$ subject_id通过mysql_real_escape_string(),否则你的代码可能会受到SQL injection attacks

(免责声明)您使用的方法和我的建议都非常过时,并已在php5.5中折旧我建议您查看prepared statements

相关问题