Сегодня я понял, что мой запрос не работает должным образом в моем php скрипте, но он работает в PhpMyAdmin. Это запрос
$query = 'SELECT Titolo, Autori, IdLibro, Copertina FROM libri WHERE Titolo REGEXP :param OR Autori REGEXP :param OR BCID REGEXP :param OR Categoria = :param LIMIT '.$start.','.$numPerPage;
Тег «param» обычно "word1([:punct:]|[:space:])*word2([:punct:]|[:space:])*"
и так далее, у меня может быть бесконечное количество слов, но очень важно, чтобы каждое слово сопровождалось ([:punct:]|[:space:])*
. Допустим, тег "param" имеет значение "ciao([:punct:]|[:space:])*don([:punct:]|[:space:])*"
. В моем коде php этот запрос возвращает 0 элементов, но в PhpMyAdmin он возвращает ровно 1 элемент, это правильно.
Это код внутри сценария php:
if(isset($_GET['item']) && isset($_GET['page'])){
$item = $_GET['item'];
$page = $_GET['page'];
$pattern = "([:punct:]|[:space:])*";
//in questo modo rimuove già possibili caratteri pericolosi
$item = preg_replace('/[^a-zA-Zà-ù_\-\d]+/i', ' ', $item);
$param = buildQueryParam($item, $pattern);
$queryCount = 'SELECT COUNT(DISTINCT IdLibro) FROM libri WHERE Titolo REGEXP :param OR Autori REGEXP :param OR BCID REGEXP :param OR Categoria = :param';
$stmtCount = $conn->prepare($queryCount);
$stmtCount->execute(['param' => $param]);
$start = ($page - 1)*$numPerPage;
$query = 'SELECT Titolo, Autori, IdLibro, Copertina FROM libri WHERE Titolo REGEXP :param OR Autori REGEXP :param OR BCID REGEXP :param OR Categoria = :param LIMIT '.$start.','.$numPerPage;
$stmt = $conn->prepare($query);
$stmt->execute(['param' => $param]);
$count = $stmtCount->fetch(PDO::FETCH_ASSOC);
$size = $count['COUNT(DISTINCT IdLibro)'];
$results[] = $size;
$i = 0;
while($i < $stmt->rowCount()){
$rows = $stmt->fetch(PDO::FETCH_ASSOC);
$copertina = $rows['Copertina'];
$id = $rows['IdLibro'];
$titolo = $rows['Titolo'];
$autori = $rows['Autori'];
$currentBook = array("copertina" => $copertina, "idLibro" => $id, "titolo" => $titolo, "autori" => $autori);
$currentBook = wp_json_encode($currentBook);
$results[] = $currentBook;
$i++;
}
$resultsJson = wp_json_encode($results);
echo $resultsJson;
die();
}
function buildQueryParam($item, $pattern){
$items = explode(' ', $item);
$result = "";
for($i = 0; $i < count($items); $i++){
$result.=$items[$i].$pattern;
}
return $result;
}
Любое предложение было бы отличным. Заранее спасибо.
РЕДАКТИРОВАТЬ:
Я изменил регулярное выражение, теперь оно работает правильно.