我正在用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上搜索。我该怎么做?
答案 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();
或者,如果您希望将结果分开,则只需运行两个查询,然后根据需要合并结果即可。