如何解决如何 PDO 查询以检索与数组中的值匹配的行
我有一个表,其中包含由逗号分隔的值的 nearattractions 列。例如A001,A002
我正在查询该列,然后将内容转换为名为 $NearbyAttractionsArray 的数组。
print_r($NearbyAttractionsArray);
数组 ([0] => A001 [1] => A003)
我想运行 PDO sql 查询来查找与数组的每个值匹配的记录,然后在循环中输出它们。
$arrayQuery = $this->con->prepare("SELECT attid,attTitle,attThumbnail,AttTagline FROM 景点 WHERE attid=$NearbyAttractionsArray AND attStatus=1");
$arrayQuery->execute();
当我尝试此操作时,它会将 $NearbyAttractionsArray 转换为名为 array 的字符串...
为 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,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
解决方法
您的查询应如下所示:
SELECT attid,attTitle,attThumbnail,AttTagline
FROM attractions
WHERE attid IN('A001','A003')
AND attStatus=1
当然,我假设 attid
存储原子值。要将数组项转换为字符串,您可以使用 foreach() loop 或 implode() function。在第二种情况下,您需要在加入之前用撇号包裹它。
折腾了好几个小时,它与 foreach 循环一起工作。
<?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,5);
$CountNearbyAttractions = sizeof($NearbyAttractionsArray);
if($NearbyAttractionsArray[0] != "") {
$results = "<h3>There are $CountNearbyAttractions Nearby Attractions</h3>";
foreach($NearbyAttractionsArray as $row) {
$arrayQuery = $this->con->prepare("SELECT attId,AttTagline FROM attractions WHERE
attId=:row AND attStatus=1");
$arrayQuery->bindParam(":row",$row);
$arrayQuery->execute();
$results .= "<div class='nearbyAttractionsItemsContainer'>";
while($row = $arrayQuery->fetch(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 foreach loop
} // 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。