我正在建立一个小型电子商务网站,我想显示评论,我想为人们创建屏幕名称(名字的第一个字母连接到姓氏上),但我可以&#39 ; t弄清楚如何从我的客户表中获取信息。让我告诉你我到目前为止所做的代码:
$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[]
数组中,所以必须有一种方法我可以从$clientId
数组中取$tn[]
并查询数据库中的名字和姓氏,但我无法弄清楚如何。
答案 0 :(得分:1)
您可以在第一个查询中将clients表加入评论表。
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>";
}