2011-10-09 93 views
0

我在功能中使用mysqli_query時出錯,錯誤:Warning: mysqli_query() expects parameter 1 to be mysqli, null given。如果我var_dump($dbc)以外的功能,我得到了預期的結果,但當我在功能內使用它,我得到NULL返回。功能中的PHP mysqli連接錯誤

這裏是我的連接腳本

define('DB_HOST', 'localhost'); 
define('DB_DBNAME', 'db'); 
define('DB_USER', 'root'); 
define('DB_PASSWORD', 'root'); 

$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DBNAME)or die(mysqli_error($dbc)); 

這裏是我的功能先進

function memInfo($var1, $var2){ 
    var_dump($dbc); 
    $query = mysqli_query($dbc, "SELECT * FROM `members` WHERE id = '".$var1."'")or die(mysqli_error($dbc)); 
    $rowCount = mysqli_num_rows($query); 

    if($rowCount > 0){ 
     $fetch = mysqli_fetch_array($query); 
     return $fetch[$var2]; 
    }else{ 
     return "Invalid member";  
    } 
} 

謝謝!

+1

$ DBC是函數的範圍之外。您需要將其作爲參數傳遞給它,或者使用'global'導入它。 [PHP的:變量範圍](http://php.net/manual/en/language.variables.scope.php) –

+0

謝謝,我忘了:P – PapaSmurf

回答

0

函數內聲明的變量有function scope。 你需要用全局前綴來訪問全局變量。

function memInfo() { 
    global $dbc; 
} 

或者,您可以傳入變量作爲函數的參數。

0

函數memInfo中的$ dbc變量被視爲「函數範圍」變量。如果您需要使用全局實例(以前定義的$ dbc = mysqli_ blah blah ...),則需要在函數內聲明爲「全局範圍」。就像這樣:

function memInfo($var1, $var2){ 
    global $dbc; 
    var_dump($dbc); 
    $query = mysqli_query($dbc, "SELECT * FROM `members` WHERE id = '".$var1."'")or die(mysqli_error($dbc)); 
    $rowCount = mysqli_num_rows($query); 

    if($rowCount > 0){ 
     $fetch = mysqli_fetch_array($query); 
     return $fetch[$var2]; 
    }else{ 
     return "Invalid member";  
    } 
} 

更多關於這個主題的PHP手冊:

http://php.net/language.variables.scope.php