2011-10-09 120 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