【问题标题】:Search multiple row separate by comma from mysql using php使用 php 从 mysql 中搜索以逗号分隔的多行
【发布时间】:2016-12-04 21:17:48
【问题描述】:

这是一个类似 DHL 的跟踪系统。使用 php 表单从 MySQL 数据库跟踪货件编号。 但我需要它使用 php 从 mysql 中以逗号分隔搜索多行。

<?php 
      $ship=$_POST['Consignment'];
      $cons = explode(',',$ship);
?>

<?php
    $sql = "SELECT * FROM tbl_courier WHERE cons_no = '$cons[]'";
    $result = dbQuery($sql);
    $no = dbNumRows($result);
    if($no == 1){
    while($data = dbFetchAssoc($result)) {      
    extract($data);
?>

 Shipment Name: <?php echo $ship_name; ?>
 Shipment Phone: <?php echo $phone; ?>

 <?php }//while
        }//if
         else {
         echo 'In else....';
 ?>
    Consignment Number not found.Search Again.

    <?php 
                }//else
    ?>

所以我需要我的搜索可以用逗号(,)分隔。 谢谢你帮助我。

【问题讨论】:

    标签: php mysql forms explode implode


    【解决方案1】:

    我找到了答案:

    if(isset($_POST['Consignment'])){
    
        $ship=$_POST['Consignment'];
        $shipment= explode(',',$_POST['Consignment']);
    
    $ship = implode("', '",$shipment) ;
    $query = "SELECT * FROM `tbl_courier` WHERE `cons_no` IN('$ship')";
    
    $results = $mysqli->query($query);
    
    if($results){
    print '<table border="1">';
    while($row = $results->fetch_assoc()) {
        print '<tr>';
        print '<td>'.$row["cons_no"].'</td>';
        print '<td>'.$row["customerName"].'</td>';
        print '<td>'.$row["customerPhone"].'</td>';
        print '</tr>';
    }  
    print '</table>';
    
    // Frees the memory associated with a result
    $results->free();
    }
    else {
        echo "Query Not Match";
    }
    $mysqli->close();
    }
    

    感谢回答。

    【讨论】:

      【解决方案2】:

      请使用 Find IN SET

      SELECT * FROM tbl_courier WHERE FIND_IN_SET(cons_no,'1,2,3,4,5')
      

      更新

      SELECT * FROM tbl_courier WHERE FIND_IN_SET(cons_no,'$ship')
      

      注意:- $ship 逗号分隔值不是数组

      【讨论】:

      • FIND_IN_SET 将返回字符串在列表中的位置。这不是 OP 需要的
      • 看它来自输入的php表单值,我如何使用1,2,3,4,5?
      • 再次检查我的答案
      【解决方案3】:

      MySql 查询中使用POST 数据之前,您应该始终准备/清理它(就安全性而言):

      <?php
      
      if (isset[$_POST['Consignment']] && !empty($_POST['Consignment'])) {
          $ship = $_POST['Consignment'];
          $cons = explode(',', $ship);
          $cons = array_filter($cons, function($v){
              return trim(strip_tags($v));
          });
          $cons = '"' . implode('","', $cons) . '"';
      
      
          $sql = "SELECT * FROM tbl_courier WHERE cons_no IN ($cons)";
          $result = dbQuery($sql);
          $no = dbNumRows($result);
          if ($no == 1) {
              while ($data = dbFetchAssoc($result)) {      
                  extract($data);
              ....
          } 
          ....
      }
      
      ?>
      

      【讨论】:

        【解决方案4】:

        更改您在选择查询中编写的 '$cons[]' 的 sql 查询,这是错误的。爆炸后你会得到数据为 1,2,3 所以你只需要在查询中写变量而不是数组和像这样的用户 IN 运算符。

         `$sql = "SELECT * FROM tbl_courier WHERE cons_no IN(".$ship.")";`
        

        【讨论】:

          【解决方案5】:

          在这种情况下,您可以使用 IN 运算符。

          <?php 
                $ship=$_POST['Consignment'];
          
          ?>
          
          <?php
              $sql = "SELECT * FROM tbl_courier WHERE cons_no IN(".$ship.")";
              $result = dbQuery($sql);
              $no = dbNumRows($result);
              if($no == 1){
              while($data = dbFetchAssoc($result)) {      
              extract($data);
          ?>
          

          希望对你有所帮助。

          【讨论】:

          • 谢谢,但是我将如何用逗号分隔我的托运单号?
          • 不需要用逗号分隔,因为在IN操作符中必须用逗号传递运单号
          猜你喜欢
          • 2013-07-03
          • 1970-01-01
          • 2018-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多