2015-06-23 392 views
6

我不確定這裏發生了什麼問題。我只是在網上學習一個教程,這些錯誤彈出。致命錯誤:調用成員函數query()null

我收到以下錯誤

錯誤

Notice: Undefined variable: db in C:\xampp\htdocs\wisconsindairyfarmers\admin\login.php on line 7 

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\wisconsindairyfarmers\admin\login.php on line 7 

代碼

<?php 
$db = new mysqli('127.0.0.1', 'root', '', 'wisconsindairyfarmers'); 
?> 

<?php 
require '../db/connect.php'; 
require '../functions/general.php'; 

    function user_exists($username){ 
     //$username = sanitize($username); 
     $result = $db->query("SELECT COUNT(UserId) FROM users WHERE UserName = '$username'"); 
     if($result->num_rows){ 
     return (mysqli_result($query, 0) == 1) ? true : false; 
    }} 

if(empty($_POST) === false){ 

    $username = $_POST['username']; 
    $password = $_POST['password']; 

    if(empty($username) === true || empty($password) === true){ 
     echo 'You need to enter a username and password'; 
    } 
    else if(user_exists($username) === false) { 
     echo 'We can\'t find that username.'; 
    } 
} 

?> 
+3

你'$ db'變量是在函數內部,因此超出範圍從定義它的代碼。聲明它是全局的或更好的,將它作爲參數傳遞給你的函數。請參閱[範圍](http://php.net/manual/en/language.variables.scope.php)上的PHP手冊 –

+0

我更改了變量,並且第一個錯誤已修復,但我仍然收到:致命錯誤:調用未定義的函數mysqli_result() – MPStimpson

+0

我認爲這是因爲您在第一部分使用了OOP並且對結果使用了過程。 – Rasclatt

回答

11

首先,你聲明的功能之外$分貝。如果你想使用它的功能裏面,你應該把這個在你的函數代碼開始時:

global $db; 

而且我想,當你寫道:

if($result->num_rows){ 
     return (mysqli_result($query, 0) == 1) ? true : false; 

你真正想要的是:

if ($result->num_rows==1) { return true; } else { return false; } 
+0

我沒有收到任何錯誤,但我似乎無法進入'user_exists($ username)=== false'當我測試你有沒有其他的智慧今天與我分享:) – MPStimpson

+0

是的,您的SQL查詢將始終返回1行,其中1個字段表示用戶數量等於用戶名。將其改爲'「SELECT * FROM users WHERE UserName ='$ username'」'它會起作用 –

+0

我想到了,但非常感謝!你一直很有幫助!這就是我盲目追隨教程所得到的結果 – MPStimpson

0

將此行放在父結構中:$ this-> load-> database();

function __construct() { 
    parent::__construct(); 
    $this->load->library('lib_name'); 
    $model=array('model_name'); 
    $this->load->model($model); 
    $this->load->database(); 
} 

這樣..它應該工作..

相關問題