Я хочу запросить записи с совпадением с формой MariaDB (InnoDB, utf8mb4_unicode_ci).
Он работает с поисковым термином без умляутов, а код SQL работает даже с умляутами в phpmyadmin. Если я использую умлаутс, я получаю пустой массив обратно.
// DB connection
$dboptions = array('charset=utf8mb4'); // with and without: no difference
$pdo = new PDO("mysql:host=$dbservername;dbname=$dbname", $dbusername, $dbpassword, $dboptions);
// Call
$pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$statement = $pdo->prepare(
" SELECT
Date(a_timestamp) AS thedate,
count(a_timestamp) AS counted,
a_comb_f
FROM `$dbtable`
WHERE Year(a_timestamp) >= '$chartyear'
AND MATCH (a_comb_f) AGAINST ('+Müller' IN BOOLEAN MODE)
GROUP BY thedate
ORDER BY thedate
");
$statement->execute();
$result = $statement->fetchAll();
var_dump($result);
Результат для Müller
:
array(0) {}
не работает!
Результат для Example
:
это работает!
thedate | counted | a_comb_f
2008-08-20 | 1 | Test Example Test
Чистый SQL прекрасно работает в phpmyadmin и т. Д.
SELECT
Date(a_timestamp) AS thedate,
count(a_timestamp) AS counted,
a_comb_f
FROM `dbs4`
WHERE Year(a_timestamp) >= '$chartyear'
AND MATCH (a_comb_f) AGAINST ('+Müller' IN BOOLEAN MODE)
GROUP BY thedate
ORDER BY thedate
Результат:
работает!
Фон:
InnoDB, utf8mb4_unicode_ci
a_comb_f Index varchar(1000) utf8mb4_unicode_ci
Обновление 1
Indizes
Schlüsselname Typ Unique Gepackt Spalte Kardinalität Kollation Null Kommentar
a_comb_f FULLTEXT Nein Nein a_comb_f 141798 Nein
Запрошенный столбец имеет индекс FULLTEXT.
Update2
Я не нашел никакого решения, поэтому я попробовал mysqli вместо PDO, и он работает!
$conn = new mysqli($dbservername, $dbusername, $dbpassword, $dbname);
if ($conn->connect_error) {
die("Connection Error " . $conn->connect_error);
}
if (!$conn->set_charset("utf8mb4")) {
printf("Error loading utf8mb4: %s\n", $conn->error);
exit();
}
$sql =
" SELECT
Date(a_timestamp) AS thedate,
count(a_timestamp) AS counted,
a_comb_f
FROM `$dbtable`
WHERE Year(a_timestamp) >= '$chartyear'
AND MATCH (a_comb_f) AGAINST ('+Müller' IN BOOLEAN MODE)
GROUP BY thedate
ORDER BY thedate
";
$result = mysqli_query($conn, $sql);
$result = mysqli_fetch_all($result, MYSQLI_ASSOC);
Кто-нибудь может сказать мне, почему он работает с MySQL, а не с PDO?
PS: я знаю, что код содержит уязвимости (инъекция sql). Это только для тестирования на localhost.