2010-09-29 66 views
2

我對OOP有點新,但我已經玩了大約一個月了。通常,我創建一個名爲Mysql的類,它具有一個直接連接到數據庫的__construct函數。之後,我有很多不同的函數將數據讀入或插入到不同的表中。PHP/Mysql - 動態選擇數據?

在今天的公交車上,我開始思考,並且提出了一個讓它不那麼混亂的好主意。我的想法是使用一個單一的函數來選擇數據(和一個用於插入),並根據傳入的查詢的外觀,它將從不同的表中選擇不同的數據。很好,對吧?

但我有點卡在這裏。我不確定如何實現這一點。我有一個小的線索如何工作,但我不知道我會如何綁定結果,或者將它們取到數組中。查詢將以另一種方法創建,然後傳遞到Mysql類中的select/insert函數。

我畫了一個關於我如何工作的「素描」。這裏是:

當然,下面的函數將放置在Mysql類中,並且已經連接到數據庫。

// This is an example query that could be passed in. 
$query = "SELECT * FROM table WHERE id=150"; 

function select_data($query) { 
    if ($smtp = $this->conn->prepare($query)) { 

     $smtp->execute(); 
     $smtp->bind_results(What happens here?); 

     if ($smtp->fetch()) { 

      foreach (fetched_row? as $key => $value) { 
       $return[] = $key => $value; 
      } 

      return $return; 

     } 
     else return NULL; 

    } 
    else return $this->conn->error; 
} 

非常感謝任何能告訴我如何實現這個目標的人。

回答

0

我想你需要相關數據時遇到問題。換句話說,當你的對象有一個屬性是另一個對象時,數據也應該被收集並動態填充。我曾經來過很遠,但是當像INNER,LEFT和RIGHT這樣的東西加入時,你會考慮進一步的考慮;

關於bind_results:http://php.net/manual/en/mysqli-stmt。結合-result.php

(也許稍微偏離主題;?SMTP這是一個mailprotocol,你確定你不是說的MySQLi的STMT)

+0

我不會使用連接對於這一點,我想。但即使我這樣做,那又如何使它不起作用?該查詢將總是類似於我的第一篇文章中提到的,可能會拋出一個連接,如果它的工作...是的,我的意思是STMT,而不是SMTP,嘿。謝謝! – Nike 2010-09-29 14:21:51

0

僅供參考,PDO已經做了很多的你似乎什麼想做。它甚至有一個返回行數組的fetchAll方法,很像你的函數。除非在查詢字符串中有參數(當然還有綁定到這些參數的值),否則不需要綁定任何內容以便使用它。

退房the PDO documentation,看看是否不符合您的需求。特別是PDOStatement->fetchAll()

1

你有更多的選擇在PHP中使用,他們有自己的具體細節。 我可以推薦一些ORMDoctrine因爲易用性,穩定性,社區和最重要的有效性。

您可以使用它一樣簡單:

$q = Doctrine_Query::create() 
    ->select('u.username, p.phone') 
    ->from('User u') 
    ->leftJoin('u.Phonenumbers p'); 

$users = $q->fetchArray(); 

或:

// Delete phonenumbers for user id = 5 
$deleted = Doctrine_Query::create() 
    ->delete() 
    ->from('Phonenumber') 
    ->andWhere('user_id = 5') 
    ->execute(); 

// Make all usernames lowercase 
Doctrine_Query::create() 
    ->update('User u') 
    ->set('u.username', 'LOWER(u.username)') 
    ->execute(); 

// 'like' condition 
$q = Doctrine_Query::create() 
    ->from('User u') 
    ->where('u.username LIKE ?', '%jwage%'); 

$users = $q->fetchArray(); 
+0

我得仔細研究一下,謝謝你的回覆! :) – Nike 2010-09-29 14:50:17