2013-10-10 85 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

相關問題