Неопределенная переменная в PHP json_encode

#php #pdo

#php #pdo

Вопрос:

Я получаю ошибку PHP неопределенная переменная в моем коде. Я использую PDO для json_encode вывода. Когда я тестирую свой код, я получаю эту ошибку. Как я могу исправить и избежать этого в будущем? В порядке ли моя структура кода? или мне нужно улучшить ее, чтобы избежать этой проблемы

Неопределенная переменная: ar

 $sql = $conn->prepare("SELECT UserID, UsrPassword, ContactID, UserTypeID, UserStatus, ClientUpdate, ServerUpdate, Deleted FROM tblUsers WHERE ContactID = :contactid AND ServerUpdate > :lastchecked AND Deleted != :deleted", $cursor);
$sql->bindValue(":contactid", $ContactID);
$sql->bindValue(":lastchecked", $LastChecked);
$sql->bindValue(":deleted", 1);

if($sql->execute()){
    $count = $sql->rowCount();

    if($count > 0){
        while ($row = $sql->fetch()) {
            $decr = CryptRC4(FromHexDump($row['UsrPassword']), $key);

            if($row['ServerUpdate'] > $row['ClientUpdate']){
                $lupdate = date("Y-m-d h:i:s", strtotime($row['ServerUpdate']));
            }
            else{
                $lupdate = date("Y-m-d h:i:s", strtotime($row['ClientUpdate']));
            }

            $ar[] = array(
                'UserID' => $row['UserID'],
                'UsrPassword' => $decr,
                'ContactID' => $row['ContactID'],
                'UserTypeID' => $row['UserTypeID'],
                'UserStatus' => $row['UserStatus'],
                'Deleted' => $row['Deleted'],
                'LastUpdated' => $lupdate
            );
        }
    }
}
else{
    $ar[] = array(
        "Message" => $sql->errorInfo(),
        "sql" => $sql
    );
}

print json_encode($ar);
  

Комментарии:

1. Просто добавьте $ar = []; перед первым if-оператором. Проблема заключается в том, что когда if($count > 0) вычисляется как false (запрос ничего не возвращает), то $ar не определяется.

Ответ №1:

вам нужно объявить переменную $ar как массив перед инструкцией if, чтобы область действия переменной не была ограничена, и вы могли получить к ней доступ за пределами If else.

     $sql = $conn->prepare("SELECT UserID, UsrPassword, ContactID, UserTypeID, UserStatus, ClientUpdate, ServerUpdate, Deleted FROM tblUsers WHERE ContactID = :contactid AND ServerUpdate > :lastchecked AND Deleted != :deleted", $cursor);
    $sql->bindValue(":contactid", $ContactID);
    $sql->bindValue(":lastchecked", $LastChecked);
    $sql->bindValue(":deleted", 1);
    $ar = array();

    if(){
     // You code goes here
    }
    else{
     // You code goes here
    }

    print_r($ar);
  

Ответ №2:

кажется if($count > 0){ , условие не выполнено, объявите ar перед этим, надеюсь, это поможет

 $sql = $conn->prepare("SELECT UserID, UsrPassword, ContactID, UserTypeID, UserStatus, ClientUpdate, ServerUpdate, Deleted FROM tblUsers WHERE ContactID = :contactid AND ServerUpdate > :lastchecked AND Deleted != :deleted", $cursor);
    $sql->bindValue(":contactid", $ContactID);
    $sql->bindValue(":lastchecked", $LastChecked);
    $sql->bindValue(":deleted", 1);
    $ar = array();

    if($sql->execute()){
        $count = $sql->rowCount();

        if($count > 0){
            while ($row = $sql->fetch()) {
                $decr = CryptRC4(FromHexDump($row['UsrPassword']), $key);

                if($row['ServerUpdate'] > $row['ClientUpdate']){
                    $lupdate = date("Y-m-d h:i:s", strtotime($row['ServerUpdate']));
                }
                else{
                    $lupdate = date("Y-m-d h:i:s", strtotime($row['ClientUpdate']));
                }

                $ar[] = array(
                    'UserID' => $row['UserID'],
                    'UsrPassword' => $decr,
                    'ContactID' => $row['ContactID'],
                    'UserTypeID' => $row['UserTypeID'],
                    'UserStatus' => $row['UserStatus'],
                    'Deleted' => $row['Deleted'],
                    'LastUpdated' => $lupdate
                );
            }
        }
    }
    else{
        $ar[] = array(
            "Message" => $sql->errorInfo(),
            "sql" => $sql
        );
    }

    print_r(json_encode($ar));