【问题标题】:How to fetch record of many IDs on single query如何在单个查询中获取多个 ID 的记录
【发布时间】:2019-01-11 13:47:36
【问题描述】:

这是我的桌子。单击完成时,它会选择选中的复选框 ID 并显示在文本框中。在 PDF 按钮上单击它会将文本框输入发布到另一个页面:

所以我想获取所有 id 的详细信息,但我的代码只显示第一个 id 的结果

if (isset($_POST['allids'])) {
 $query = "SELECT * FROM tbl_order
 WHERE order_id = '".$_POST['allids']."'";
 $result = mysqli_query($conn, $query);

 while($row = mysqli_fetch_array($result))
 {
  echo $row['order_no']."</br>";
  echo $row['ordercustomer_name']."</br>";
 }

}

这是我的表格

<form method="POST" action="fetch3.php" target="_blank">
 <div class="container" id="order_data">

</div>

<div>
  <h4><strong>GENERATE REPORT</strong></h4>      
  <input type="text" name="allids" id="allids">
  <button type="button" class="btn btn-primary btn-lg btn_done" name="btn_done" id="btn_done"><i class='fa'></i> DONE</button>     
  <button type="submit" class="btn btn-warning btn-lg btn_pdf" name="btn_pdf" id="btn_pdf"><i class='fa fa-file-pdf-o'></i> PDF</button>     
</div>
</form>

【问题讨论】:

  • 看看mysql手册中的IN ()语法,替换你的=
  • 您应该使用带有绑定变量的准备好的语句。你不能使用=,你需要IN()或FIND_IN_SET()。
  • 这个表单/HTML 和带有值的 db 模式在哪里?您的问题不清楚。
  • 您一直在第二个答案下发表评论,但在第一个答案中什么也没说。我要求提供更多代码,但您选择保持沉默。你来这里寻求帮助,所以帮助我们帮助你。

标签: php mysql forms


【解决方案1】:

您可以在 SQL 查询中使用 IN 语句,并使用逗号分隔的 ID 组:

WHERE order_id IN (695,392)

警告:Little Bobby 说 your script is at risk for SQL Injection Attacks.。即使escaping the string 也不安全!

了解MySQLi 的prepared 语句。专门针对IN 使用these instructions

【讨论】:

  • 我怀疑$_POST['allids'] == "695,392"。做准备好的语句将提供WHERE order_id IN ('695,392') 这是错误的。
  • @Cid 是什么意思?我一直成功地生成逗号分隔的变量以在IN 语句中使用。
【解决方案2】:

你可以通过:

if (isset($_POST['allids'])) {
 $query = "SELECT * FROM tbl_order
 WHERE order_id in('".$_POST['allids']."')";
 $result = mysqli_query($conn, $query);

 while($row = mysqli_fetch_array($result))
 {
  echo $row['order_no']."</br>";
  echo $row['ordercustomer_name']."</br>";
 }

}

【讨论】:

  • 将该变量 $_POST['allids'] 的输入转换为 '695,392'
  • 如何转换请解释
  • @AnkitKumar 您正在创建一个字符串'695,392',在 MySQL 看来它就像一个值。您必须从 ID 创建一个数组,使其看起来像 '695','392'
  • 举个例子
【解决方案3】:

现在它工作正常,谢谢大家

$id = $_POST['allids'];

$query = "SELECT * FROM tbl_order
WHERE order_id IN($id)";
$result = mysqli_query($conn, $query);

while($row = mysqli_fetch_array($result))
{
 echo $row['order_id']."</br>";
 echo $row['order_no']."</br>";
 echo $row['ordercustomer_name']."</br>";
}

【讨论】:

  • 这是行不通的,因为您将单个数字字符串 ($id) 传递给查询。
  • 好吧,这可以工作,因为它没有参数化。这是非常糟糕和不安全的,但这可以工作。 $id = "1,2,3"; -> "IN($id)" 给出"IN(1,2,3)"。相信您的用户输入祝您好运。当您可以花费数夜时间修复生产中容易避免的安全漏洞时,为什么还要编写防弹代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多