【发布时间】:2021-06-04 13:40:46
【问题描述】:
我有一个表,其中包含以逗号分隔的值的列附近的景点。例如 A001,A002
我正在查询该列,然后将内容转换为一个名为 $NearbyAttractionsArray 的数组。
print_r($NearbyAttractionsArray);
数组([0] => A001 [1] => A003)
我想运行一个 PDO SQL 查询来查找与数组的每个值匹配的记录,然后在循环中输出它们。
$arrayQuery = $this->con->prepare("SELECT attid, attTitle, attThumbnail, AttTagline 从景点 WHERE attid=$NearbyAttractionsArray AND attStatus=1");
$arrayQuery->execute();
当我尝试这个时,它会将 $NearbyAttractionsArray 转换为一个名为数组的字符串...
对于 attId 与数组中的某个值匹配的每一行,输出值 attid、attTitle、attThumbnail、AttTagline 的正确语法是什么?
我怀疑需要某种 foreach 循环,但找不到将其写为 PDO 语句的正确方法。
非常感谢
从角度来看,我的完整课程代码是:
<?php
class NearbyAttractionsProvider {
private $con, $attId;
public function __construct($con, $attId) {
$this->con = $con;
$this->attId = $attId;
} // end of constructor
public function createNearbyAttractionsList($con, $attId) {
$query = $this->con->prepare("SELECT nearbyAttractions FROM attractions WHERE attId=:attId");
$query->bindParam(":attId", $attId);
$query->execute();
$this->sqlData = $query->fetch(PDO::FETCH_ASSOC);
$NearbyAttractions = $this->sqlData["nearbyAttractions"];
$NearbyAttractionsRemoveCommas = str_replace(',', '',$NearbyAttractions);
$NearbyAttractionsArray = str_split($NearbyAttractionsRemoveCommas, 4);
print_r($NearbyAttractionsArray);
$CountNearbyAttractions = sizeof($NearbyAttractionsArray);
if($NearbyAttractionsArray[0] != "") {
$results = "<h3>There are $CountNearbyAttractions Nearby Attractions</h3>";
$arrayQuery = $this->con->prepare("SELECT attid, attTitle, attThumbnail, AttTagline FROM attractions WHERE
attid=$NearbyAttractionsArray AND attStatus=1");
$arrayQuery->execute();
$results .= "<div class='nearbyAttractionsItemsContainer'>";
while($row = $arrayQuery->fetchAll(PDO::FETCH_ASSOC)) {
$id = $row["attid"];
$img = $row["attThumbnail"];
$title = $row["attTitle"];
$tagline = $row["AttTagline"];
$results .= "<div class='nearbyAttractionListItem'>
<a href='Attraction.php?attId=$id&title=$title' data-AttractionId='$id'
class'NearbyAttractionItem-url'>
<img class='NearbyAttractionItem-thumbnail' src='$img' height='220' width=300'>
<h3 class='NearbyAttractionItem-title'>$title</h3>
<p class='NearbyAttractionItem-tagline'>$tagline</p>
</a>
</div>";
} // End of while loop
$results .= "</div>"; // End of nearbyAttractionsItemsContainer
} // End of IF statement
else {
$results = "<h3>There are No Nearby Attractions</h3>";
} // End of Else statement
return $results;
} // End of public function createNearbyAttractionsList
} // End pf class NearbyAttractionsProvider
【问题讨论】:
-
看看这个可能的骗局,stackoverflow.com/questions/14767530/…
-
你为什么不简单地加入?
-
这是另一个很好的例子,说明为什么逗号分隔的数据不适合 DB 列。如果这只是在 1nf 中,您可以使用子查询。见stackoverflow.com/questions/3653462/…
-
联接是链接两个或多个表中的行,但这里只有一个表,因此不是有效的解决方案。