PHP - Как мне сделать код для поиска по 2 различным таблицам в одной базе данных - PullRequest
0 голосов
/ 01 июля 2019

Я делаю приложение для проверки орфографии со сленговыми словами.Если флажок установлен, код будет искать как в english_table, так и в slang_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 голосов
/ 01 июля 2019

Вы можете просто запустить 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();

Или, если вы хотите, чтобы результаты были разделены, просто запустите два запроса и объедините результаты по своему усмотрению.

0 голосов
/ 01 июля 2019

Чтобы объединить результаты из 2 таблиц, вы должны использовать оператор UNION в SQL.Вы можете узнать больше об этом здесь 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 .= ";";

Однако, как сказал Дхарман, ваш код открыт для SQL-инъекций, и, как это может показаться в настоящее время проблемой, как только веб-сайт начнет работать, кто-то попытается и успешно получит контроль над вашей базой данных.Перейдите по его ссылкам, чтобы узнать больше о современных методах работы с запросами к базе данных в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...