我的代码:
<?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;
}
}
?>
错误:
致命错误:在C:'xampp'htdocs'barman'assets'login'functions.php第8行调用非对象的成员函数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');
…或者这个……(not so good)
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
。否则它将不起作用。:)