2012-02-05 43 views
0

我需要一個返回服務數組的函數,每個服務都包含一個ID和一個名稱。 我一直在尋找的mysqli的文檔中,但是如果存在比這更聰明的解決方案無法驗證:從查詢返回一個對象數組?

function getServices() { 
    $services = array(); 

    $stmt = $this->db->prepare('SELECT id, name FROM services WHERE client_id=?'); 
    $stmt->bind_param("i", $this->clientId); 
    $stmt->execute(); 
    $stmt->bind_result($id, $name); 
    while ($stmt->fetch()) { 
     $service = array(); 
     $service['id'] = $id; 
     $service['name'] = $name; 
     $services[] = $service; 
    } 
    $stmt->close(); 

    return $services; 
} 

這似乎有點麻煩,我要打造的結果數組自己。有沒有辦法讓MySQL使用選定的列構建數組?

+0

我看不出有什麼理由不能使用此代碼。即使mysql生成的版本存在(我懷疑,但我不確定,我總是用這種方式),沒有必要改變。 – axiomer 2012-02-05 11:58:35

+0

@ 19greg96 - OP使用mysqli,而不是mysql – 2012-02-05 12:02:40

回答

2

我不使用mysqli的選項,但是從inspecting the docs,我認爲這應該工作:

$stmt = $this->db->prepare('SELECT id, name FROM services WHERE client_id=?'); 
$stmt->bind_param("i", $this->clientId); 
$stmt->execute(); 

$result = $stmt->get_result(); 
$services = $result->fetch_all(MYSQLI_ASSOC); 

$stmt->close(); 

return $services; 

因此,使用:
1. mysqli_stmt::get_result()
2. mysqli_result::fetch_all()

它適用於PHP> = 5.3.0。

+0

感謝您的解決方案。可悲的是我的服務器正在運行PHP 5.2,所以'get_result'方法不存在。 – dhrm 2012-02-05 12:42:55

+1

@DennisMadsen:很抱歉聽到這個消息。在這種情況下,如果您認爲值得付出努力,您可以擴展'mysqli_stmt'並自己實現它。或者,如果您覺得值得付出努力,確實可以用'PDO'來代替'mysqli'。 – 2012-02-05 12:56:47

1

切換到PDO,和你有

PDOStatement::fetchAll()

+0

借調。您可以傳遞fetch參數'$ stmt-> fetchAll(PDO :: FETCH_ASSOC)'返回一個關聯數組。很多其他選項在這裏:http://php.net/manual/en/pdostatement.fetchall.php – 2012-02-05 12:16:11