2017-07-13 47 views
0

我正在構建一個小型電子商務網站,我想顯示評論,並且想要爲人員創建屏幕名稱(名字的第一個字母連接到姓氏上) ,但我無法弄清楚如何從我的客戶表中獲取信息。讓我告訴你,我這樣做的遠代碼:
根據Id從不同表格獲取數據

$invId = filter_input(INPUT_GET, 'invId', FILTER_SANITIZE_NUMBER_INT); // this is taken from a name value pair from the view 
// Gets the raw data from the database  
function getProRev($invId){ 
     $db = acmeConnect(); 
     $sql = "SELECT * FROM reviews WHERE invId = :invId ORDER BY reviewId DESC"; 
     $stmt = $db->prepare($sql); 
     $stmt->bindValue(':invId', $invId, PDO::PARAM_STR); 
     $stmt->execute(); 
     $tn = $stmt->fetchAll(); 
     $stmt->closeCursor(); 
     return $tn; 
    } 

// Builds the simple review display 
function buildReviewDisplay($reviews){ 
    $rd = "<div id='reviewView'>"; 
    foreach ($reviews as $review){ 
     $rd .= "<h2>$review[clientId]</h2>"; 
     $rd .= "<h3>$review[reviewDate]</h3>"; 
     $rd .= "<p>$review[reviewText]</p>"; 
     $rd .= "<hr>"; 
    } 
    $rd .= "</div>"; 
    return $rd; 
} 

正如你所看到的,我顯示的clientId(數字),這是不是我想要的,現在這就是我米卡住了。我建立了兩個表格(客戶端和評論)之間的關係,但我無法弄清楚如何獲取數據。下面是我試着寫的功能,但它沒有工作:

// Trying to get the dang client info 
function getUsername($clientId){ 
$db = acmeConnect(); 
$sql = "SELECT * FROM clients WHERE clientId = :clientId"; 
$stmt = $db->prepare($sql); 
$stmt->bindValue(':clientId', $clientId, PDO::PARAM_STR); 
$stmt->execute(); 
$cd = $stmt->fetchAll(); 
$stmt->closeCursor(); 
$fletter = substr($cd['clientFirstname'], 0, 1); 
$scrnam = $fletter . $cd['clientLastname']; 
return $scrnam; 
} 

,我明白,這並沒有工作,因爲沒有什麼傳遞$clientId參數的功能,而是包含在$tn[]數組,因此必須有一種方法可以從$tn[]數組中取出$clientId並查詢數據庫中的姓和名,但我無法弄清楚。

+0

難道你不能'getUsername($ review ['clientId'])'? – Barmar

+0

@Barmar我試過了,PHP不喜歡函數括號裏面的[] –

+0

函數參數中的數組訪問沒有問題,它一直在做。你一定做錯了什麼。 – Barmar

回答

1

您可以在第一個查詢中將客戶表加入評論表。

SELECT * FROM reviews 
LEFT JOIN clients ON reviews.clientId = clients.clientId 
WHERE invId = :invId ORDER BY reviewId DESC 

然後,您將有權訪問客戶端名稱列,而無需爲顯示的每個評論執行額外的查詢。

這樣你就可以使用getUsername中的代碼buildReviewDisplay

foreach ($reviews as $review) { 
    $fletter = substr($review['clientFirstname'], 0, 1); 
    $scrnam = $fletter . $review['clientLastname']; 
    $rd .= "<h2>$scrnam</h2>"; 
    $rd .= "<h3>$review[reviewDate]</h3>"; 
    $rd .= "<p>$review[reviewText]</p>"; 
    $rd .= "<hr>"; 
} 
+0

)這樣的工作非常完美!!謝謝!我想我對連接有點模糊,所以我現在需要去檢查它們!左邊或右邊加入! –

+1

不客氣,左邊或右邊表示關係中「擁有」的一面,在這種情況下,我使用了左連接,這樣所有的評論都會顯示出來,即使有任何評論由於某種原因沒有匹配的客戶端 –