2017-06-21 3 views
-2

だから私はMySQLiをを使用しようとしていますが、しかし、私は私が読ん...これは、なぜ私はわからないんだエラーmysqliのコール()エラー

Fatal error: Call to a member function query() on null in /home/u740966689/public_html/dashboard/API/infFunctions.php on line 78

を投げ続けますいくつかの他の質問と私はデータベースに接続する方法などのいくつかの変更が、私はまだエラーが発生します。

MY CODE:

ファイル1:

require 'infFunctions.php'; 
$DatabaseHost = '***'; 
$DatabaseUser = '***'; 
$DatabasePass = '***'; 
$DatabaseName = '***'; 
$mysqli   = new mysqli("$DatabaseHost","$DatabaseUser","$DatabasePass","u740966689_site") or die ("infAPI | Could not connect to the database"); 

if (isset($_GET['Type'])){ 
    $Type = $_GET['Type']; 
    if ($Type == 'Register') { 
     $Response = Signup($_GET['name'],$_GET['password'],$_GET['email']); 
     if ($Response == '1') { 
      $resp = 'success'; 
     } else if ($Response == '2') { 
      $resp = 'error_one'; 
     } else if ($Response == '3') { 
      $resp = 'error_two'; 
     } else { 
      $resp = 'error_three'; 
     } 
     echo $resp; 
    } 
} 

ファイル2: $ mysqliのオブジェクトはグローバルスコープで作成されていますが、しようとしている

function Signup($Username, $Password, $Email){ 
    $UserArray = $mysqli->query("SELECT * FROM infWebAccounts WHERE Username='$Username'"); 
    $UserArray2 = $mysqli->query("SELECT * FROM infPendingAccounts WHERE Username='$Username'"); 
    if (mysqli_num_rows($UserArray) == 0 AND mysqli_num_rows($UserArray2) == 0){ 
      $Password = hash("sha512",$Password); 
      $Query  = $mysqli->query("INSERT INTO infPendingAccounts (Username,Password,Email,Verified) VALUES ('$Username','$Password','$Email',N')"); 
      return '1'; 
     }elseif (mysqli_num_rows($UserArray) > 0){ 
      return '2'; 
     }else{ 
      return '3'; 
     } 
} 
+1

[phpの呼び出しは、nullのメンバ関数のクエリ()への呼び出し]可能性があります(https://stackoverflow.com/questions/39434570/php-call-to-a-member-function-クエリーオンヌル) – Jens

+0

私は '$ mysqli'オブジェクトを別のファイルに作成して別のファイルで呼び出すと思います。 –

+0

私ははいですが、2番目のファイルが必要です...... –

答えて

0

それを関数の中で使用する。これはPHPのスコープ規則に違反しています。ここでは、子スコープが親スコープ内で状態に暗黙的にアクセスすることはできません。あなたが明示的に一般的に悪い考えであり、それはスパゲッティコードにつながるおそれがあるので避けてべき(あなたがグローバルスコープ内の変数にアクセスしたいことを示すためにglobalを使用していずれかの方法でそれを回避することができます

PHP Scoping Rules

)、mysqliオブジェクトを渡すことができる関数にパラメータを追加します。

0

グローバル変数を使用する場合は、これを関数に追加する必要があります。

簡単に問題はPHPの変数のスコープであるPHP: Variable scope

In PHP global variables must be declared global inside a function if they are going to be used in that function.

0

をチェックSignup() -function


function Signup($Username, $Password, $Email) 
{ 
    global $mysqli; 

    $UserArray = $mysqli->query("SELECT * FROM infWebAccounts WHERE Username='$Username'"); 
    $UserArray2 = $mysqli->query("SELECT * FROM infPendingAccounts WHERE Username='$Username'"); 

    . 
    . 
    . 

の先頭にglobal $mysqli;を追加します。詳しくはこちらをご覧ください

function Signup($Username, $Password, $Email, $mysqli){ 

} 

あなたのサインアップ機能で

function Signup($Username, $Password, $Email){ 

     global $mysqli; // Add this line 

$UserArray = $mysqli->query("SELECT * FROM infWebAccounts WHERE Username='$Username'"); 
     $UserArray2 = $mysqli->query("SELECT * FROM infPendingAccounts WHERE Username='$Username'"); 
     if (mysqli_num_rows($UserArray) == 0 AND mysqli_num_rows($UserArray2) == 0){ 
      $Password = hash("sha512",$Password); 
      $Query  = $mysqli->query("INSERT INTO infPendingAccounts (Username,Password,Email,Verified) VALUES ('$Username','$Password','$Email',N')"); 
      // $rTech  = new Roblox(); 
      // $rTech -> DoLogin($rTech->password); 
      // $rTech -> SendPM($rTech->GetUserID($Username),"RDS Owner Analytics Site Verification","Please goto the site and verify with : \n" . hash("sha512",$Username.$Password)); 
      return '1'; 
     }elseif (mysqli_num_rows($UserArray) > 0){ 
      return '2'; 
     }else{ 
      return '3'; 
     } 
    } 

か、単にパラメータとしてあなたの接続変数を渡すことができます:あなたは$ mysqliの変数を参照する前にサインアップ()関数内 グローバル$ mysqliのを追加ここでの変数のスコープについて: http://php.net/manual/en/language.variables.scope.php