以下代码是通过对用户表单提交的多字段、多关键词进行数据拆分后,自动拼装成的sql中where后面的部分,并希望最终形成完整的sql语句。
但是有以下两个问题:
1、拼装后的语句,末尾总是会多一个AND,能不能删除呢?(请教了别人,可能是因为我没看懂他的意思,结果也没能删除成功,因此代码中您会看到我尝试删除最后AND的相关代码。)
2、有没有更好的写法呢?如果更复杂,就请解决第一个问题就可以了,让最终形成的sql是语法合规的即可。
谢谢您!我初学php,写法不科学,还请多多包涵,初学手残党,还请您动手改一下代码为盼!!
ps:也许我上面的描述过于复杂了,所以,您只要在PHP环境下运行一下这段代码就知道我的想法了。
<title>test</title>
<?php
header("Content-Type: text/html;charset=utf-8");
$query_rs = ""; // 初始化$query_rs变量
$key_bt = $_REQUEST['bt']; //获得用户输入标题●●●●●●●●●●●●●●
if ($key_bt !=null)
{
$result = explode(" ", $key_bt);//分解用户输入的多个关键词,存入$result数组
for($i=0;$i<count($result);$i++) //根据每个搜索关键词构建SQL语句
{
$query_rs .= " 标题 LIKE '%$result[$i]%' AND ";
echo "query_rs标题=".$query_rs;
echo "<hr />";
}
}
$key_sbm = $_REQUEST['sbm']; //获得用户输入标题●●●●●●●●●●●●●●
if ($key_sbm !=null)
{
$result = explode(" ", $key_sbm);//分解用户输入的多个关键词,存入$result数组
for($i=0;$i<count($result);$i++) //根据每个搜索关键词构建SQL语句
{
$query_rs .= " 编号 LIKE '%$result[$i]%' AND ";
echo "query_rs编号=".$query_rs;
echo "<hr />";
}
}
$key_dy = $_REQUEST['dy']; //获得用户输入标题●●●●●●●●●●●●●●
if ($key_dy !=null)
{
$result = explode(" ", $key_dy);//分解用户输入的多个关键词,存入$result数组
for($i=0;$i<count($result);$i++) //根据每个搜索关键词构建SQL语句
{
$query_rs .= " 主编 LIKE '%$result[$i]%' AND ";
echo "query_rs主编=".$query_rs;
echo "<hr />";
}
}
$key_zzs = $_REQUEST['zzs']; //获得用户输入标题●●●●●●●●●●●●●●
if ($key_zzs !=null)
{
$result = explode(" ", $key_zzs);//分解用户输入的多个关键词,存入$result数组
for($i=0;$i<count($result);$i++) //根据每个搜索关键词构建SQL语句
{
$query_rs .= " 出版社 LIKE '%$result[$i]%' AND ";
echo "query_rs出版社=".$query_rs;
echo "<hr />";
}
}
$key_lb = $_REQUEST['lb']; //获得用户输入类别●●●●●●●●●●●●●●
if ($key_lb !=null)
{
$result = explode(" ", $key_lb);//分解用户输入的多个关键词,存入$result数组
for($i=0;$i<count($result);$i++) //根据每个搜索关键词构建SQL语句
{
$query_rs .= " 类别 LIKE '%$result[$i]%' AND ";
echo "query_rs类别=".$query_rs;
echo "<hr />";
}
}
$key_yy = $_REQUEST['yy']; //获得用户输入标题●●●●●●●●●●●●●●
if ($key_yy !=null)
{
$result = explode(" ", $key_yy);//分解用户输入的多个关键词,存入$result数组
for($i=0;$i<count($result);$i++) //根据每个搜索关键词构建SQL语句
{
$query_rs .= " 参编 LIKE '%$result[$i]%' AND ";
echo "query_rs参编=".$query_rs;
echo "<hr />";
}
}
// 删除最后的AND
if (substr($query_rs, -3) === "AND") {
$query_rs = rtrim($query_rs, "AND");
echo "query_rs最终=".$query_rs;
echo "<hr />";
}
var_dump($query_rs);
echo "<hr />";
$sql = "select * from data_content_166 WHERE $query_rs";
echo "【最终的sql表达式】=".$sql;
echo "<hr />";
?>
<form name="form1" action="" method="post">
<p>标题: <input type="text" value="11 22" name="bt" /> 编号: <input type="text" value="33 44" name="sbm" /> 主编: <input type="text" value="55 66" name="dy" /> 出版社: <input type="text" value="77 88" name="zzs" /> 类别: <input type="text" value="99 1010" name="lb" /> 参编: <input type="text" value="1111 1212" name="yy" /> <input type="submit" value="Submit" /></p>
</form>