使用 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();
}
感谢回答。
它是一个类似 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();
}
感谢回答。