2016-10-17 86 views
0

我有一個簡單的函數來寫入我的數據庫。這是我得到的錯誤。簡單的SQL語句/ PHP函數不起作用的問題

這是我得到

Notice: Trying to get property of non-object in /var/sites/q/quasisquest.uk/public_html/KeepScore/MySQLDao.php on line 92 Fatal error: Uncaught exception 'Exception' in /var/sites/q/quasisquest.uk/public_html/KeepScore/MySQLDao.php:92 Stack trace: #0 /var/sites/q/quasisquest.uk/public_html/KeepScore/createCommunity.php(26): MySQLDao->createCommunity('[email protected]', 'YGHFYG', 'Endcliffe') #1 {main} thrown in /var/sites/q/quasisquest.uk/public_html/KeepScore/MySQLDao.php on line 92

這是最初的PHP腳本調用它的錯誤:

<?php 

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 


require("Conn.php"); 
require("MySQLDao.php"); 

$email = htmlentities($_POST["email"]); 
$code = htmlentities($_POST["code"]); 
$communityname = htmlentities($_POST["communityname"]); 

$dao = new MySQLDao(); 
$dao -> openConnection(); 

$result = $dao -> createCommunity($email, $code, $communityname); 

$dao->closeConnection(); 

?> 

這是MySQLDao.php

<?php 

class MySQLDao{ 

var $dbhost = null; 
var $dbuser = null; 
var $dbpass = null; 
var $conn = null; 
var $dbname = null; 
var $result = null; 

public function __construct(){ 
    $this->dbhost = Conn::$dbhost; 
    $this->dbuser = Conn::$dbuser; 
    $this->dbpass = Conn::$dbpass; 
    $this->dbname = Conn::$dbname; 
} 

public function openConnection() 
{ 
    $this->conn = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname); 
    if (mysqli_connect_errno()) 
     echo new Exception("Could not establish connection with database"); 

} 

public function getConnection() 
{ 
echo ("2"); 
    return $this->conn; 
} 

public function closeConnection() 
    { 
    if($this->conn!=null) 
     $this->conn->close(); 
} 

public function getUserDetails($email) 
{ 
    $returnValue = array(); 
    $sql = "select * from users where user_email='".$email."'"; 

    $result = $this->conn->query($sql); 
    if($result != null && (mysqli_num_rows($result) >= 1)){ 
     $row = $result -> fetch_array(MYSQLI_ASSOC); 
     if(!empty($row)){ 
      $returnValue = $row; 
     } 
    } 
    return $returnValue; 

} 

public function getUserDetailsWithPassword($email, $userPassword) 
{ 
    $returnValue = array(); 
    $sql = "select id, user_email, user_name from users where user_email = '".$email."' and user_password = '".$userPassword."'"; 

    $result = $this->conn->query($sql); 
    if($result != null && (mysqli_num_rows($result) >= 1)){ 
     $row = $result -> fetch_array(MYSQLI_ASSOC); 
     if(!empty($row)){ 
      $returnValue = $row; 
     } 
    } 
    return $returnValue; 
} 

public function registerUser($email, $password, $username) 
{ 
    $sql = "insert into users set user_email=?,user_password=?,user_name=?"; 
    $statement = $this->conn->prepare($sql); 

    if(!$statement) 
     throw new Exception($statement->error); 

    $statement->bind_param("sss", $email, $password, $username); 
    $returnValue = $statement->execute(); 

    return $returnValue; 
} 

public function createCommunity($email, $code, $communityname) 
{ 
    $sql = "insert into communities set email=?,code=?,communityname=?"; 
    $statement = $this->conn->prepare($sql); 

if(!$statement){ 
     throw new Exception($statement->error); 
} 
    $statement->bind_param("sss", $email, $code, $communityname); 
    $returnValue = $statement->execute(); 

    return $returnValue; 
} 


} 

?> 

這就是社區'表還有一個'id'列(第一列),我不會發布,因爲我認爲它會自動填充和增加..也許這是我出錯的地方?

+0

也許你的'$ this-> conn爲null。檢查或向我們展示更多代碼。 – DonO

+1

你正在檢查'$ statement'是否爲false,所以它不會是一個對象。相反,請檢查連接上的mysqli_error。 – aynber

+1

發佈完整的'MySQLDao'類 – Machavity

回答

1

如果連接首先失敗,則需要知道爲什麼顯示實際的數據庫錯誤。其次,在沒有連接到數據庫的情況下繼續執行腳本是沒有意義的。

所以我建議這個改變你openConnection()方法

此外,如果你認爲這是在MSYQLI這些代碼4號線將基本確保您獲得告訴任何錯誤不對勁任何機會,而你正在開發特別是如果您正在關閉「錯誤報告」的活動服務器上進行開發。

<?php 
ini_set('display_errors', 1); 
ini_set('log_errors',1); 
error_reporting(E_ALL); 
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 


public function openConnection() 
{ 
    $this->conn = new mysqli($this->dbhost, $this->dbuser, 
          $this->dbpass, $this->dbname 
          ); 
    if ($mysqli->connect_error) { 
     echo 'Connect Error: ' . $mysqli->connect_errno . ' - ' 
     . $mysqli->connect_error; 
     exit; 
    } 
}