2017-07-13 46 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

不客气,左边或右边表示关系中“拥有”的一面,在这种情况下,我使用了左连接,这样所有的评论都会显示出来,即使有任何评论由于某种原因没有匹配的客户端 –