Запрос Sql работает в PhpMyAdmin, но не в моем php скрипте - PullRequest
0 голосов
/ 06 августа 2020

Сегодня я понял, что мой запрос не работает должным образом в моем 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;

    }

Любое предложение было бы отличным. Заранее спасибо.

РЕДАКТИРОВАТЬ:

Я изменил регулярное выражение, теперь оно работает правильно.

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