【问题标题】:How Do I Iterate MySQL Table After SELECT PDO Query Using Positional Placeholders?如何使用位置占位符在 SELECT PDO 查询后迭代 MySQL 表?
【发布时间】:2020-07-26 20:38:04
【问题描述】:

通常,我可以通过以下方式获取表中的每个课程名称:

<?php                        
            
                   // query users' table to retrieve courses' contents
                   $courses = $pdo->query("SELECT * FROM courses"); # question marks is used as a place holder
            
                   echo '<option value="">Select a course</option>';
                   foreach ($courses as $row)
                   {
                       echo '<option value=" '. $row["c_name"] .' ">'. $row["c_name"] .'</option>';
                   }
                 
?>

现在我想通过使用位置占位符的 PDO 准备语句来做同样的事情,但它不起作用。以下是我尝试过的:

$stmt = $pdo->prepare("SELECT * FROM courses WHERE c_name = ?");
                   if ($stmt->execute(array($_GET['c_name'])))
                   {
                      while ($row = $stmt->fetch())
                      {
                         echo '<option value=" '. $row["cid"] .' ">'. $row["c_name"] .'</option>' .
                         '<option value=" '. $row["c_name"] .' " selected="selected">'. $row["c_name"] .'</option>' .
                        '<input type="hidden" name="cid" . value="' . $row["cid"] .'" id="cid"/>';
                      }
                  }

【问题讨论】:

  • 这个SELECT * FROM courses只是一个简单的选择,没有任何条件。所以我不确定为什么$stmt-&gt;execute([$cid]);

标签: php mysql pdo


【解决方案1】:

您正在使用准备好的语句,但未在查询中使用占位符。有关详细信息,请参阅PHP PDO Prepared Statements documentation

// In the below query, I've added `WHERE id = ?` as your placeholder
$stmt = $pdo->prepare("SELECT * FROM courses WHERE id = ?");
$stmt->execute([$cid]); 
while ($row = $stmt->fetch()) # get courses data
{
    ...
}

编辑

我可能错过了您检查$cid 是否已发布的位置,这应该满足您的要求:

$cid = $_POST["cid"] ?? NULL;
if (is_null($cid)) {
  $stmt = $pdo->query("SELECT * FROM courses");
}
else {
  $stmt = $pdo->prepare("SELECT * FROM courses WHERE id = ?");
  $stmt->execute([$cid]);
}

$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($results as $row) {
    ...
}

【讨论】:

  • 抱歉我的回复晚了。你没有为我工作。字段内仅显示一个选择选项,而其他选项显示在框外。知道为什么会出现问题吗?
猜你喜欢
  • 2020-06-16
  • 2012-05-23
  • 1970-01-01
  • 2011-01-26
  • 2014-04-11
  • 1970-01-01
相关资源
最近更新 更多