Uncaught Error: вызов функции-члена fetch_row () для логического значения в | PHP на основе сокетного соединения

0

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

Uncaught Error: Call to a member function fetch_row() on boolean in 

Я получаю ошибку в строке ниже каждой из двух последних двух функций.

while($row = $result->fetch_row()) {

Я проверил весь свой запрос от phpmyadmin и его работоспособность без каких-либо проблем.

Мой полный файл PHP похож на ниже

<?php
require_once("includes/conf.php");


function getAllNumbers() {
    global $conn;
    $sql = "SELECT number from number_list WHERE server=1";
    $result = $conn->query($sql);
    $data = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($data, $row[0]);
        }
    }
    $response["data"] = $data;
    return $response;
}

function getNewNumbers() {
    global $conn;
    $sql = "SELECT number, id from new_numbers WHERE server = 1";
    $result = $conn->query($sql);
    $newData = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($newData, $row[0]);
        $id = $row[1];
        $delete = "DELETE number from new_numbers WHERE id = $id";
        $result = $conn->query($delete);

        }
    }
    $response["newData"] = $newData;
    return $response;
}

function getDeleteNumbers() {
    global $conn;
    $sql = "SELECT number, id from delete_numbers WHERE server = 1";
    $result = $conn->query($sql);
    $deleteData = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($deleteData, $row[0]);
        $id = $row[1];
        $delete = "DELETE number from delete_numbers WHERE id = $id";
        $result = $conn->query($delete);

        }
    }
    $response["deleteData"] = $deleteData;
    return $response;
}

?>

Таблица number_list

id  int(11) NO  PRI NULL    auto_increment  
name    varchar(50) NO      NULL        
number  varchar(50) NO      NULL        
server  int(10) NO      0       
status  int(1)  NO      -1      
last_act    timestamp   NO      CURRENT_TIMESTAMP       
user_id int(11) NO  MUL NULL        
created_at  timestamp   NO      CURRENT_TIMESTAMP       
disable int(11) NO      0       
notify  int(1)  NO      1       
fcm varchar(500)    NO      NULL

Таблица new_numbers

id  int(11) NO  PRI NULL    auto_increment  
number  varchar(50) NO      NULL        
server  int(10) NO      0   

Таблица delete_numbers

id  int(11) NO  PRI NULL    auto_increment  
number  varchar(50) NO      NULL        
server  int(10) NO      0   

Я должен очистить, что я вызываю эти функции каждые xx минут из моего PHP файла на основе сокетов, который я продолжаю работать 24/7 из командной строки. Я думаю, что из-за require_once. Дайте мне знать, может ли кто-нибудь дать мне подсказку, чтобы решить эту проблему. Спасибо

Теги:
mysqli

2 ответа

0

Ошибка указывает, что fetch_row получает логическое значение для выполнения операций. Измените свои запросы Sql.

 function getAllNumbers() {
    global $conn;
    $sql = "SELECT number from number_list WHERE server='1'";
    $result = $conn->query($sql);
    $data = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($data, $row[0]);
        }
    }
    $response["data"] = $data;
    return $response;
}

function getNewNumbers() {
    global $conn;
    $sql = "SELECT number, id from new_numbers WHERE server = '1'";
    $result = $conn->query($sql);
    $newData = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($newData, $row[0]);
        $id = $row[1];
        $delete = "DELETE number from new_numbers WHERE id = '$id'";
        $result = $conn->query($delete);

        }
    }
    $response["newData"] = $newData;
    return $response;
}

function getDeleteNumbers() {
    global $conn;
    $sql = "SELECT number, id from delete_numbers WHERE server = '1'";
    $result = $conn->query($sql);
    $deleteData = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($deleteData, $row[0]);
        $id = $row[1];
        $delete = "DELETE number from delete_numbers WHERE id = '$id'";
        $result = $conn->query($delete);

        }
    }
    $response["deleteData"] = $deleteData;
    return $response;
}

Более того, такой подход является открытым приглашением на Sql Injections. Вы должны использовать подготовленные заявления

-1

вот ошибка

$ result = $conn-> query ($ delete);

используйте это вместо этого

<?php
require_once("includes/conf.php");


function getAllNumbers() {
    global $conn;
    $sql = "SELECT number from number_list WHERE server=1";
    $result = $conn->query($sql);
    $data = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($data, $row[0]);
        }
    }
    $response["data"] = $data;
    return $response;
}

function getNewNumbers() {
    global $conn;
    $sql = "SELECT number, id from new_numbers WHERE server = 1";
    $result = $conn->query($sql);
    $newData = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($newData, $row[0]);
        $id = $row[1];
        $delete = "DELETE number from new_numbers WHERE id = $id";
        $deleted = $conn->query($delete);

        }
    }
    $response["newData"] = $newData;
    return $response;
}

function getDeleteNumbers() {
    global $conn;
    $sql = "SELECT number, id from delete_numbers WHERE server = 1";
    $result = $conn->query($sql);
    $deleteData = array();
    if($result) {
        while($row = $result->fetch_row()) {
        array_push($deleteData, $row[0]);
        $id = $row[1];
        $delete = "DELETE number from delete_numbers WHERE id = $id";
        $deleted = $conn->query($delete);

        }
    }
    $response["deleteData"] = $deleteData;
    return $response;
}

?>
  • 0
    Там два запроса в функции. Вы упомянули строку для второго запроса, и я не думаю, что это ошибка
  • 0
    Вы заменяете переменную $ result, которая содержит результат запроса select ($ result = $ conn-> query ($ sql);) внутри цикла, который становится логическим для следующего цикла, вы должны дать другое имя переменной, такое как $ delete = $ conn -> запрос ($ удаление); мой пост, показывающий правильный ответ, отредактирован Апулом Гуптой, чтобы ответить на то же самое, что я снова сделал работу бесплатно

Ещё вопросы

Сообщество Overcoder
Наверх
Меню