PHP получаю Call to a member function fetch_all() on boolean при запросе через js fetch

86
28 апреля 2021, 00:40

Пожалуйста, помогите! Ничего не понимаю... Вроде, должно все работать.

Спрашиваю с помощью js у сервера:

request({url, data}) {
        return fetch(url, {
            method: 'POST',
            cache: 'no-cache',
            credentials: 'same-origin',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            redirect: 'follow',
            referrer: 'no-referrer',
            body: data,
        })
        .then(response => response.text());
    }

На стороне сервера меня ждут вот с таким:

<?php
require_once(__DIR__.'/../classes/Connection.php');
require_once(__DIR__.'/../classes/JSONRewriter.php');
require_once(__DIR__.'/../classes/Purify.php');
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $referrer = POST ...;
    $real_row = ...;
    $newConnection = new Connection();
    $overwriting = Purify::openArray($newConnection->getFromDB(sql-хрень));
    if () {
        ...Обработка результата...
    }
    $newConnection->query(Запись результата);
}

Класс для подключения

class Connection {
    private $host = ...;
    private $user = ...;
    private $pswd = ...;
    private $dbse = ...;
    public function con() {
        $connect = new mysqli($this->host, $this->user, $this->pswd, $this->dbse);
        if ($connect->connect_error) throw new Exception('MySQL connection attempt dropped. {$connect->connect_errno}. {$connect->connect_error}');
        return $connect;
    }
    public function query($query) {
        $connect = $this->con();
        mysqli_query($connect, $query);
        mysqli_close($connect);
    }
    public function getFromDB($query) {
        $connect = $this->con();
        $response = mysqli_query($connect, $query);
        return $response->fetch_all($resulttype = MYSQLI_NUM);
        mysqli_close($connect);
    }
}

php работал, пока я спрашивал его через xhr, но на fetch выдает

<br />
<b>Fatal error</b>:  Uncaught Error: Call to a member function fetch_all() on boolean in C:\Users\S_iva\OneDrive\Desktop\OSPanel\domains\localhost\api\classes\Connection.php:22
Stack trace:
#0 C:\Users\S_iva\OneDrive\Desktop\OSPanel\domains\localhost\api\set\referrer.php(14): Connection-&gt;getFromDB('SELECT content ...')
#1 {main}
  thrown in <b>C:\Users\S_iva\OneDrive\Desktop\OSPanel\domains\localhost\api\classes\Connection.php</b> on line <b>22</b><br />
Answer 1

У функций есть определенные поведения, которые надо знать или подсматривать в документации. К тому же ошибка явно указывает на функцию, в которой произошла ошибка.

Функция mysqli_query

Возвращает FALSE в случае неудачи. В случае успешного выполнения запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query() вернет объект mysqli_result. Для остальных успешных запросов mysqli_query() вернет TRUE.

Ну и выполнить на булевском false вызов функции fetch_all() закончится неудачей. В общем обрабатывайте возможные ошибки. И да, у вас mysqli_close($connect); никогда не отработает т.к. выше return из функции.

READ ALSO
через jсуп не показывает кол-во игроков

через jсуп не показывает кол-во игроков

я указал все верно в jsoup, но у меня почему-то показываются версии и тд, а именно онлайн людей не показывается, что делать?

81
Замедление работы при чтении каждого следующего файла

Замедление работы при чтении каждого следующего файла

Есть код, который читает данные из CSV файла, используя библиотеку apache csv commonsМетод, который загружает данные из файла вызывается дважды, ему...

91
Anroid. Fragment. Проблема с заменой фрагмента

Anroid. Fragment. Проблема с заменой фрагмента

в приложении есть ViewPager c фрагментами и в каждом из них есть список RecyclerViewпри нажатии на каждый item списка создается новый фрагмент методом...

75
пинг с помощью InetAddress

пинг с помощью InetAddress

Хочу сделать программу простую, которая пингует сервераРаботает так: InetAddress

99