【发布时间】:2017-05-14 12:17:41
【问题描述】:
我有一个使用 HTML 的常用搜索表单,它将从 mysql 中提取数据(连接使用 PHP 和 mysqli)。该函数在搜索 1 个值时效果很好,但我想让用户可以搜索多个值,这些值将由逗号 (,) 分隔。
但我想在搜索框中搜索 2 个或多个值,例如:42-7278954,53-1217544,07-2517487,...
我希望用户可以输入如下图所示的内容,结果将有 2 行 --> CN_no 42-7278954和53-1217544:
到目前为止我的查询是:
$sql = "SELECT * FROM mock_data WHERE CN_no IN ('{$CN_no}') OR doc_no IN ('{$doc_no}')";
注意:CN_no 是“Shipment Code”,doc_no 是“Reference No”
但是...由于语法不正确,这显然给了我一个错误。
请帮我修改一下。谢谢。
======== 根据 vp_arth 的回答更新查询 ========
$cn = explode(',', $CN_no);
$incn = str_repeat('?, ', count($cn)-1).'?';
$doc = explode(',', $doc_no);
$indoc = str_repeat('?, ', count($doc)-1).'?';
$query = "SELECT * FROM mock_data WHERE CN_no IN ({$incn}) or doc_no IN ({$indoc})";
$result = $conn->query($query , array_merge($incn, $indoc));
但它给了我一个error
【问题讨论】:
-
我还是不明白查询是如何检测用户输入的逗号(,)并将值放入数组中的。
-
不相关,但要警惕Sql Injection
-
不使用机密数据并不意味着您可以忽略安全性。
-
你有
IN ('42-7278954,53-1217544,07-2517487'),应该是IN ('42-7278954', '53-1217544', '07-2517487')。尝试了解占位符,那么它就只是IN (?, ?, ?)。