![](/img/trans.png)
[英]How do I use PHP to construct an SQL query to sort and select from multiple rows in my database
[英]Construct SQL SELECT query out of multiple PHP GET parameters
我正在使用答案https://stackoverflow.com/a/5203351/1711950中提供的代码来处理SQL WHERE子句的不同组合:
$vars = array(
(!empty($_GET["var1"]))? " keyword = '". $_GET["var1"] ."' ": null,
(!empty($_GET["var2"]))? " author = '". $_GET["var2"] ."' ": null,
(!empty($_GET["var3"]))? " date = '". $_GET["var3"] ."' ": null,
(!empty($_GET["var4"]))? " forums = '". $_GET["var4"] ."' ": null
);
function myfilterarray($var)
{
return !empty($var)?$var: null;
}
$newvars = array_filter($vars, 'myfilterarray');
$where = join(" OR ", $newvars);
$sql = "SELECT DISTINCT title, description FROM table ".(($where)?"WHERE ".$where: null);
echo $sql;
当每个GET参数是单个值时,代码将起作用,如下所示:
http://example.com/getData.php?keyword=a1
我希望能够处理这种情况:
http://example.com/getData.php?keyword=a1,b1,c1,a2,b2,c2
为此,我已经修改了如下代码:
(!empty($_GET["var1"]))? " keyword IN ('". $_GET["var1"] ."') ": null
当然,这会使SQL查询看起来像这样,由于引用而无法使用。
SELECT * FROM table WHERE keyword IN ('SE162321000156-3PQZ,SE2321000164-7381037592311')
我如何解决这个问题?
谢谢!
您必须拆分这些值,在它们两边加上引号,然后将字符串重新连接在一起。 这是一个非常基本的示例:
$foo = (!empty($_GET["keyword"]))? $_GET["keyword"] : null;
$foo = explode(",", $foo);
$fooArray = [];
foreach( $foo as $fooElement ) {
$fooArray[] = "'$fooElement'";
}
$foo = implode(",", $fooArray);
echo $foo; // output: 'a1','b1','c1','a2','b2','c2'
$arr = explode(",",trim($_GET["var1"]));
$var = "";
for($i=0;$i<sizeof($arr);$i++)
{
if($i == (sizeof($arr)-1))
{
$var .= "'".$arr[$i]."'";
}
else
{
$var .= "'".$arr[$i]."',";
}
}
现在您可以在查询中使用$var
,即IN($ var)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.