得到这个致命错误我做错了什么

时间:2011-09-06 21:11:56

标签: php mysqli fatal-error

我的代码:

<?php

$conn = new MySQLi("localhost", "root", "", "barman");

function validate_details($user, $pass){

$sql = "SELECT * FROM users";
$result = $conn->query($sql);

    if($user==$row->user && isset($user)){

        if($pass == $row->pass && isset($pass)){
            return true;
        }
    }else{
        return false;
    }


} 


?>

错误:

致命错误:在第8行的C:\ xampp \ htdocs \ barman \ assets \ login \ functions.php中的非对象上调用成员函数query()(第8行是$ result = $ conn-&gt ;查询($ SQL); )

3 个答案:

答案 0 :(得分:6)

除了全局设置的变量或对象外,你不能使用函数之外的变量或对象。

尝试使用

function validate_details($user, $pass){
    global $conn;
    ......................
}

答案 1 :(得分:2)

您正尝试从函数中访问在全局范围内创建的变量。

$conn变量作为参数传递给函数(这是首选选项),或使用global keyword将其导入函数的范围。

所以你可以这样做:(首选选项)

function validate_details ($conn, $user, $pass) {
  // function code goes here
}

// Call the function like this
$result = validate_details($conn, 'myuser', 'mypass');

......或者...... (不太好)

function validate_details ($user, $pass) {
  global $conn;
  // function code goes here
}

将连接对象作为参数传递更好的原因有很多,但这里有几个:

  • 这意味着您可以在同一个脚本中使用多个连接的函数
  • 这意味着您可以轻松地在其他脚本中回收未经修改的功能
  • 如果在某些时候您需要在全局范围内重命名$conn变量,则无需担心在函数中更改它

我认为值得一提的是$GLOBALS数组 - 这是一个superglobal(即它随处可用),你可以使用它,但实际上这与{{{{3}}没有多大区别。 1}}关键字,通常应该避免出于同样的原因。

您可以像这样使用它:

global

答案 2 :(得分:0)

使用global $conn。否则它将无法工作。 :)