加入的sql查询无法填充下拉列表

oalqel3c  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(345)

我试图创建一个连接的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>
m4pnthwp

m4pnthwp1#

代码中至少有两个明显的错误,所以我将提供一个答案。我不能保证这能解决所有问题。
编写查询时对所有列名进行质量检查。
此外,您将值作为参数传入,因此不需要单引号。

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 至少在两个表中,因此引用不明确。

bvjxkvbb

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 .
我的解决方案是:

$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>");
    }

相关问题