2017-04-25 48 views
0

我真的很希望有人能幫我弄清楚我錯過了什麼。我已經將我的安裝從PHP 5.6升級到7.0,這迫使我從Mysql更新到Mysqli,由於某些原因,我的安裝程序被破壞了。從PHP的另一個課程使用MySQLi

我研究並遵循本指南「在其它類中使用的MySQLi」:​​3210

我寫作爲最後的手段,並在其他網站也看起來很好,但好像問題就來了一些來自其他地方。

首先我有一個數據庫類:

private $serverName = "localhost"; 
    private $userName = "DBUserName"; 
    private $pass = "UserPassword"; 
    private $database = "SelectedDB"; 

    public $conn; 


    public function __construct(){ 

      $this->conn = new mysqli($this->serverName, $this->userName,$this->pass,$this->database); 


      } 

然後我有一個API類,我想訪問此連接,它看起來像

require_once 'Database.php'; 
class MyAPI{ 
private $db; 
public function __construct($request_uri, $postData, $origin) { 



    $this->db = new Database(); 


} 

,最後我嘗試從調用它功能:

$getUserResult = mysqli_query($this->db->conn, $getUserQry); 

當過我調用$這個 - > DB->康恩我得到一個內部服務器錯誤500

如果我在MyAPI類中創建數據庫連接,則不存在對我來說很奇怪的問題。

我希望有人能指出我的方向。

更新: 我糾正了腳本中的拼寫錯誤,現在我得到200,但值仍然從查詢mysqli_query爲空。

如果我創建$ dbtest = new database();並使用它,而不是它工作正常。有沒有辦法讓它在引用$ db的構造函數中工作?

+0

「500錯誤」的意思是「你的PHP出了問題」意思是「檢查你的'error.log'文件」或者你的服務器拋出錯誤的地方。 – tadman

+1

'private $ db;'應該是__in__類的定義 –

+0

總是在開發和測試代碼的時候,在腳本的最前端'error_reporting(E_ALL); ini_set('display_errors',1);' –

回答

0
  • 擺脫無用的數據庫類。
  • 創建一個 $ db實例從香草mysqli。
  • 把它作爲一個構造函數的參數爲​​每個需要一個數據庫連接類

database.php中:

<?php 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
$db = new mysqli("localhost", "DBUserName", "UserPassword", "SelectedDB"); 
$db->set_charset('utf8'); 

myapi.php

<?php 
class MyAPI 
{ 
    protected $db; 

    public function __construct($db, $request_uri, $postData, $origin) 
    { 
     $this->db = $db; 
    } 

    public function getUser() 
    { 
     $getUserQry = "..."; 
     $res = $this->db->query($getUserQry); 
    } 
} 

app.php

<?php 
require_once 'Database.php'; 
require_once 'myapi.php'; 

$api = new MyAPI($db, $request_uri, $postData, $origin); 
$user = $api->getUser(); 
相關問題