iou3344 2022-12-27 22:38 采纳率: 85.2%
浏览 28
已结题

PHP+mysql拼接sql语句时遇到的问题请教

以下代码是通过对用户表单提交的多字段、多关键词进行数据拆分后,自动拼装成的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>
  • 写回答

1条回答 默认 最新

  • wux_labs 2022-12-27 22:47
    关注

    拼接末尾的and可以删除。
    望采纳,谢谢!

    <title>test</title>
    <?php
    header("Content-Type: text/html;charset=utf-8");
    
    $query_rs = " 1 = 1 "; // 初始化$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 .= " AND 标题 LIKE '%$result[$i]%' ";
        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 .= " AND 编号 LIKE '%$result[$i]%' ";
        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 .= " AND 主编 LIKE '%$result[$i]%' ";
        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 .= " AND 出版社 LIKE '%$result[$i]%' ";
        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 .= " AND 类别 LIKE '%$result[$i]%' ";
        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 .= " AND 参编 LIKE '%$result[$i]%' ";
        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>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月4日
  • 已采纳回答 12月27日
  • 修改了问题 12月27日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题