PHP-如何获取代码以在同一数据库的2个不同表上进行搜索

时间:2019-06-30 22:59:33

标签: php database mysqli

我正在用with语制作一个拼写检查应用程序。如果选中此复选框,则代码将同时搜索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上搜索。我该怎么做?

2 个答案:

答案 0 :(得分:0)

要合并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中处理数据库查询的当前做法的更多信息。

答案 1 :(得分:0)

您可以有条件地运行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();

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