联接 SQL 查询未能填充下拉列表
Posted
技术标签:
【中文标题】联接 SQL 查询未能填充下拉列表【英文标题】:Joined SQL querie failed to populate dropdown 【发布时间】:2018-11-08 16:18:53 【问题描述】:我正在尝试创建一个连接的 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>
【问题讨论】:
您的代码应该正在检查错误。 【参考方案1】:您的代码中至少有两个明显的错误,所以我将提供一个答案。我不能保证这能解决所有问题。
编写查询时所有列名的质量。
此外,您将值作为参数传递,因此您不需要单引号。
SELECT DISTINCT c.Choice_ID, s.name
From Sports s INNER JOIN
Choices c
ON c.Sport_ID = s.Sport_ID INNER JOIN
Year y
ON y.Year_ID = c.Year_ID
Where ?.Code Like CONCAT('%', :year, '%') AND
?.Current = 'Y' AND
?.Sex IN (:sex, 'B') AND
?.Term_ID = 3 AND -- removed single quotes because I assume this is a number
y.Year_ID=".$row['Year_ID']." ");
?
是相应表别名的占位符。我不知道这些列是从哪里来的,所以我不能添加它。不过,最后一个用于ON
子句。 Year_ID
至少在两个表中,所以引用不明确。
【讨论】:
【参考方案2】:很棒的东西,几乎就是这样。在 c.Choice_ID 之后,s.name 需要大写为 s.Name。最后一个语句y.Year_ID=".$row['Year_ID']." ");
也不需要,因为它已经包含在语句INNER JOIN Year y ON y.Year_ID = c.Year_ID
中。
我的解决方案是:
$stmt = $conn->prepare(
"SELECT DISTINCT c.Choice_ID, s.Name
From Sports AS s INNER JOIN Choices As c
ON c.Sport_ID = s.Sport_ID INNER JOIN Year As y
ON y.Year_ID = c.Year_ID
Where y.Code Like CONCAT('%', :year, '%') AND
c.Current = 'Y' AND
c.Sex IN (:sex, 'B') AND
c.Term_ID = 3 ORDER BY Name ASC");
$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>");
【讨论】:
以上是关于联接 SQL 查询未能填充下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
如何验证从 asp.net 中的 SQL 填充的下拉列表(UnobtrusiveValidationMode)错误