【问题标题】:PHP - How do I get to make the code to search on 2 different tables on same databasePHP - 如何使代码在同一数据库上的 2 个不同表上进行搜索
【发布时间】:2019-06-30 22:59:33
【问题描述】:

我正在用俚语制作一个拼写检查应用程序。如果选中该复选框,代码将同时搜索english_table 和slang_table。否则只会搜索english_table。

我尝试过使用 if 语句,但似乎错误。

$sql = "SELECT * FROM english_table WHERE engwords LIKE '".$partcheck."'";
$sql1 = "SELECT * FROM slang_table WHERE words LIKE '".$partcheck."'"; 


if statement if checked
if($result = mysqli_query($con, $sql){...}
elseif($result = mysqli_query($con, $sql1){...}

我的期望是,如果选中该复选框,代码将在两个表中搜索匹配的单词,否则将只搜索english_table。我该怎么做?

【问题讨论】:

    标签: php database mysqli


    【解决方案1】:

    要合并来自 2 个表的结果,您应该在 SQL 中使用 UNION 运算符。 你可以在这里了解更多信息https://www.w3schools.com/sql/sql_union.asp

    导致这个查询:

    SELECT * FROM english_table WHERE engwords LIKE 'XXXXXX'
    UNION
    SELECT * FROM slang_table WHERE words LIKE 'XXXXX'";
    

    使用此查询,表应具有相同顺序的相似列。如果您有不同的列,请考虑指定它们而不是获取所有内容。

    然后您可以根据您的 if 语句有条件地添加查询的第二部分。

    PHP:

    $sql = "SELECT * FROM english_table WHERE engwords LIKE 'XXXXXXX";
    if ($checked) {
         $sql .= " UNION SELECT * FROM slang_table WHERE words LIKE 'XXXXXXX'";
    }
    // closing the sql query
    $sql .= ";";
    

    但是,正如 Dharman 所说,您的代码对 SQL 注入是开放的,而且现在看来这似乎不是问题,只要网站一上线,就会有人尝试并成功控制您的数据库。按照他的链接了解更多关于在 PHP 中处理数据库查询的当前实践。

    【讨论】:

      【解决方案2】:

      您可以有条件地运行 Union ALL:

      $likePartcheck = '%' . $partcheck . '%';
      
      $query = "SELECT * from english_table WHERE engwords LIKE ?" . ($_GET['checkbox'] ? " UNION ALL SELECT * FROM slang_table WHERE words LIKE ?" : "");
      
      $stmt = $mysqli->prepare($query);
      
      if ($_GET['checkbox']) {
      
          $stmt->bind_param('ss', $likePartcheck, $likePartcheck);
      
      } else {
      
          $stmt->bind_param('s', $likePartcheck);
      
      }
      
      $stmt->execute();
      

      或者,如果您希望将结果分开,只需运行两个查询并根据需要组合结果。

      【讨论】:

        猜你喜欢
        • 2018-12-07
        • 2023-01-12
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多