PHP-根据发布变量动态创建sql语句

问题描述

我对我认为应该非常简单的事情感到困惑,我想知道你们中的任何一个都可以帮忙的事情。

长话短说;在我的PHP搜索表单中,用户可以选择“ fromdate”和“ todate”。他们还可以输入两个字符串,通常是电话号码。

用户不必输入日期范围,他们只需使用发送者和接收者进行搜索即可。 如果是这种情况,我希望$ daterange_stmt为空白,并且AND运算符不出现在sql语句中。

类似地,如果用户仅提供日期范围,而不提供发送者/接收者,则我希望sql语句不包含AND运算符,也不包含$ operator_stmt。

如果这些代码中的一些是废话,请原谅-我已经在所有地方添加和更改了一些位,以使其正常工作... PHP不是我的强项。

像这样抓住各种武器...

 $df = $_POST['df'];
 $dt = $_POST['dt'];
 $sender = $_POST['sender'];
 $reciever = $_POST['reciever'];

我的sql select语句看起来像这样...

 $sql = "SELECT * FROM comms_session_all s JOIN operators u ON s.agent = u.user_id WHERE " . $whereclause . " ORDER BY start_time ASC";

$ Whereclause被这样声明...

 $daterange_stmt = "";
 $operator_stmt= "";

 if(!($df==" ")){
 $daterange_stmt = "start_time between '" . $df. "' AND '" . $dt. "'";
 }
 if(!(empty($sender))){
 $operator_stmt= "sender like '%" . $sender . "%' AND reciever like '%" . $reciever. "%'";
 }

 $whereclause = $daterange_stmt;
 if(!(df==" ")){
 if(!($operator_stmt=="")){
 $whereclause = $daterange_stmt . " AND " . $operator_stmt;
 }
 } else {
 if(!($operator_stmt=="")){
    $whereclause = $operator_stmt;
 }
 }

因此,当前,如果提供了日期范围,并且提供了发送者/接收者,那么搜索就可以了,一切都很好。

如果仅输入一位,则由于流氓“与”而不必输入,因此失败。 执行时的sql语句如下所示:

SELECT * FROM comms_session_all的JOIN运算符u ON s.agent = u.user_id WHERE AND 发件人(如'%447958xxxx%')和收件人(如'%123456%')ORDER BY start_time ASC2

需要任何帮助!预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)