繁体   English   中英

我要怎么做才能导致这个致命错误

[英]What am I doing wrong to get this 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-> query($ sql);)

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

尝试使用

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

您试图从函数内部访问在全局范围内创建的变量。

可以将$conn变量作为参数传递给函数(这是首选),也可以使用global关键字将其导入函数的作用域。

因此,您可以执行以下操作:(首选选项)

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数组-这是可以使用的超全局变量 (即随处可用),但实际上,它与global关键字并没有太大区别,出于相同的原因通常应避免使用。

您可以这样使用它:

function validate_details ($user, $pass) {
  // ...
  $result = $GLOBALS['conn']->query($sql);
  // ...
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM