trygaios Değişkenleri böyle sorgu içerisine eklerseniz SQL injection ile sizi uçururlar. Parameter binding kullanmalısınız.
https://www.php.net/manual/tr/pdo.prepare.php
MATCH...AGAINST ayrıca float bir değer döner. Bu değer aramanın ne kadar alakalı sonuç içerdiğini belirten skor değeridir. Bu değere göre tersten sıralarsanız en alakalı değerler en üstte gelir. Yani özetle:
// +Aynı +yıl +içerisinde +düzeltme +beyannamesi +ile +artırılması
// formatına getirmeniz gerekiyor.
$search = 'Aynı yıl içerisinde düzeltme beyannamesi ile artırılması';
$search = preg_replace('/\s+/', ' ', $search);
$search = '+' . implode(' +', explode(' ', $search));
$legis = [1, 2, 3];
$legisPlaceholder = trim(str_repeat('?, ', count($legis)), ', ');
$sql = <<<SQL
SELECT
*,
MATCH (law_text) AGAINST (? IN BOOLEAN MODE) AS relevance
FROM
laws
JOIN lawtexts ON laws.id = lawtexts.law_id
JOIN lawcategories ON laws.lawcategory = lawcategories.id
JOIN lawgroups ON laws.lawgroup = lawgroups.id
JOIN legislations ON laws.lawlegislation = legislations.id
WHERE
MATCH (law_text) AGAINST (? IN BOOLEAN MODE)
AND lawlegislation IN ({$legisPlaceholder})
ORDER BY
relevance DESC
SQL;
$params = array_merge([$search, $search], $legis);
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
Eğer cümleyi kelime kelime değil de tam aramasını istiyorsanız + ile birleştirmeyip çift tırnak içinde vereceksiniz:
$search = 'Aynı yıl içerisinde düzeltme beyannamesi ile artırılması';
$search = sprintf('"%s"', $search);
şeklinde olacak.
https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html