使用 php 从 mysql 中搜索以逗号分隔的多行

Search multiple row separate by comma from mysql using php

它是一个类似 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
    ?>

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

在这种情况下,您可以使用 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);
?>

希望对您有所帮助。

请使用 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 逗号分隔值不是数组

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

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

MySql 查询中使用数据之前,您应该始终 prepare/sanitize 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);
        ....
    } 
    ....
}

?>

我找到了答案:

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();
}

感谢回答。