我试图创建一个连接的sql查询来填充一个html下拉列表,但它似乎不起作用,我不知道为什么。我没有收到任何错误信息。下拉列表没有填充。有明确的信息,这是意味着在下拉列表-这不是一个问题,缺乏数据的下拉列表-这是一个问题的代码。
<select name="term3sport">
<option value=" " selected disabled>Please select a third term sport...</option>
<?php
include_once('connection.php');
try{
$stmt = $conn->prepare(
"SELECT DISTINCT Choices.Choice_ID, Sports.name
From Sports
INNER JOIN Choices ON Choices.Sport_ID = Sports.Sport_ID
INNER JOIN Year ON Year.Year_ID = Choices.Year_ID
Where Code Like CONCAT('%', :year, '%')
AND Current='Y' AND (Sex=':sex' OR Sex='B') AND Term_ID='3' AND Year_ID=".$row['Year_ID']." ");
$stmt->bindParam(':year', $_SESSION['year']);
$stmt->bindParam(':sex', $_SESSION['sex']);
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
echo("<option value='".$row['Choice_ID']."'>".$row['Name']."</option>");
}
}
catch(PDOException $e)
{
echo "error".$e->getMessage();
}
$conn=null;
?>
<input type="submit" value="Submit Choices">
</select>
2条答案
按热度按时间m4pnthwp1#
代码中至少有两个明显的错误,所以我将提供一个答案。我不能保证这能解决所有问题。
编写查询时对所有列名进行质量检查。
此外,您将值作为参数传入,因此不需要单引号。
这个
?
是相应表别名的占位符。我不知道这些列是从哪里来的,所以我不能把它加进去。最后一个,不过,是用在ON
条款。Year_ID
至少在两个表中,因此引用不明确。bvjxkvbb2#
很棒的东西,差不多就是这样。在c.choice\u id之后,s.name需要大写为s.name。也是最后一句话
y.Year_ID=".$row['Year_ID']." ");
不需要,因为它已经包含在声明中INNER JOIN Year y ON y.Year_ID = c.Year_ID
.我的解决方案是: