我有这个错误:
致命错误:在第8行的/Applications/XAMPP/xamppfiles/htdocs/login.php中调用非对象的成员函数query()
这条线是这样的:
$res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
Run Code Online (Sandbox Code Playgroud)
这是login.php:
$user = $_POST['user'];
$pass = $_POST['pass'];
$pw = md5($pass);
include_once('connect.php');
function check_login($user,$pw,&$result){
$res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
$cont = 0;
while($row = $res->fetch_object()){
$cont++;
$result = $row;
}
if($cont == 1){
return 1;
}
else{
return 0;
}
}
if(!isset($_SESSION['userid'])){
if(isset($_POST['login'])){
if(check_login($user,$pw,$result) == 1){
session_start();
$_SESSION['userid'] = $result->id_user;
header("location:index.php?var=ok");
}
else{
header('location:index.php?var=log');
}
}
}
Run Code Online (Sandbox Code Playgroud)
和connect.php的代码:
$mysqli = new mysqli('localhost', 'root', 'pass', 'cms' );
if ($mysqli->connect_error) {
die('Error de Conexión (' . $mysqli->connect_errno . ') '
. $mysqli->connect_error);
}
Run Code Online (Sandbox Code Playgroud)
可能是什么问题呢?连接数据库的问题?
这很可能是一个范围问题.这意味着$mysqli您在包含文件中定义的变量超出了check_login函数的范围(即在此函数中未知).
您可以尝试$mysqli从全局范围获取变量
function check_login($user,$pw,&$result){
global $mysqli;
$res = $mysqli->query("SELECT * FROM user WHERE user='$user' and password='$pw'");
// ...
Run Code Online (Sandbox Code Playgroud)
编辑:哦,你还应该注意代码中的SQL注入漏洞.使用预处理语句来防止这个问题(或者至少使用类似函数来逃避输入变量mysqli::real_escape_string).