2014-10-17 59 views
-1

我正在爲我的PHP項目編寫一個查詢類,但是我遇到了一個問題,查詢不會從我的數據庫返回任何值。PHP查詢類不回滾值

PHP代碼:

<?php 

class DatabaseConnect{ 

    protected $host = 'localhost'; 
    protected $user = 'root'; 
    protected $pass = 'root'; 
    protected $db = 'test'; 

    public function __construct(){ 

     $con = mysqli_connect($this->host, $this->user, $this->pass, $this->db) or die('Cannot Connect to DB'); 

     return $con; 

    } 
} 

class ExecuteQuery{ 

    public $connection; 
    public $result; 

    public function __construct(){ 

     $this->connection = new DatabaseConnect(); 

    } 

    public function getQueryAction($sql){ 

     $this->result = mysqli_query($this->connection, $sql); 

    } 

    public function setStringAction($string){ 

     $file = file_get_contents('queryFile.json'); 
     $json = json_decode($file, true); 

     foreach($json['Queries'] as $this->result){ 

      return $this->result[$string]; 

     } 
    } 
} 

$execute = new ExecuteQuery(); 

傑森文件( '它將包含所有查詢'):

{ 
    "Queries": [ 

     {"query1":"SELECT * FROM tbl_user"}, 
     {"query2":"SELECT * FROM tbl_users WHERE status=1"} 

    ] 
} 

索引文件:

<?php 
require_once('query.php'); 
?> 

<html> 
<head> 
    <title> 
    </title> 
</head> 
<body> 
<h1>Welcome</h1> 
<h3><?php 

    $execute->getQueryAction($execute->setStringAction('query1')); 

    foreach($execute->result as $item){ 
     echo $item['id']. ' ' . $item['user_name'] .'<br />'; 
    } 

?></h3> 
</body> 
</html> 

所以我要做的就是創建一個類來處理jason文件提取一個查詢,然後類來運行查詢。正如我前面提到賈森文件包含所有的查詢,在指數和任何文件,其中包括我query.php我可以運行所有這樣的疑問:

$execute->getQueryAction($execute->setStringAction('query name')); 

一些調試我意識到代碼getQueryAction方法失敗後,我認爲mysqli_query不喜歡$ this->連接。

我的問題是:

爲什麼 以及如何解決它

回答

0

構造函數不能返回任何東西,一個構造函數唯一的目的是創建一個類的實例

private $con; 
public function __construct(){ 

    $this->con = mysqli_connect($this->host, $this->user, $this->pass, $this->db) 
       or die('Cannot Connect to DB'); 
} 

public function get_connection(){ 
    return $this->con; 
} 

所以在ExecuteQuery類,你可以這樣做:

public function __construct(){ 
    $db = new DatabaseConnect(); 
    $this->connection = $db->get_connection(); 
} 
+0

哇確定,使很多道理感謝你,現在我不會再犯同樣的錯誤.... !!! – Tomazi 2014-10-17 14:33:37

0

mysqli->query不返回結果。它只返回一個可以請求結果的句柄。查一查mysqli->fetch_assoc

http://php.net/manual/en/mysqli-result.fetch-assoc.php

if ($result = mysqli_query($this->connection, $sql)) { 

    /* fetch associative array */ 
    while ($item = mysqli_fetch_array($result)) { 
     echo $item['id']. ' ' . $item['user_name'] .'<br />'; 
    } 

    /* free result set */ 
    mysqli_free_result($result); 
} 
+0

另外:如果你做一個foreach循環內'return',你會從循環,而不是所有的結果得到的第一個結果! – ToBe 2014-10-17 13:21:06

+0

好吧,我只是改變了'返回$ this-> result [$ string];' to'echo $ this-> result [$ string];' – Tomazi 2014-10-17 13:25:36

+0

但現在它只返回查詢字符串而不是結果 – Tomazi 2014-10-17 13:25:52

0

THX試圖幫助我的傢伙,但我只是設法在這裏稍作改變定勢它,他們分別是:

改變了方法NAMD從__construct下DBcon

$這個 - >結果= mysqli_query($這個 - >連接 - >:類的DatabaseConnection, 然後我GET getQueryAction這樣做DBcon(),$ sql);

全班同學:

class DatabaseConnect{ 

    protected $host = 'localhost'; 
    protected $user = 'root'; 
    protected $pass = 'root'; 
    protected $db = 'test'; 

    public function DBcon(){ 

     $con = mysqli_connect($this->host, $this->user, $this->pass, $this->db) or die('Cannot Connect to DB'); 

     return $con; 

    } 
} 

class ExecuteQuery{ 

    public $connection; 
    public $result; 

    public function __construct(){ 

     $this->connection = new DatabaseConnect(); 

    } 

    public function getQueryAction($sql){ 

     $this->result = mysqli_query($this->connection->DBcon(), $sql); 

    } 

    public function setStringAction($string){ 

     $file = file_get_contents('queryFile.json'); 
     $json = json_decode($file, true); 

     foreach($json['Queries'] as $this->result){ 

      return $this->result[$string]; 

     } 
    } 
} 

$execute = new ExecuteQuery(); 

現在一切都運行完美仍然不知道爲什麼前面的方法(存在於inital問題),但這個工程的xD

+0

很高興你找到了解決方案。如果你想在未來使用類,你可能想要了解更多關於OOP的知識,你應該這樣做。 ;) – ToBe 2014-10-17 14:39:00

+0

是的thx你tyring幫助我:) – Tomazi 2014-10-17 14:40:46