PHP: Сбой скрипта после запроса PDO

#php #mysql #pdo

Вопрос:

Во время процесса создания пользователя я делаю несколько запросов к различным базам данных, чтобы получить настройки нового пользователя. Этот сценарий прекрасно работал около полутора лет, но теперь что-то не так.

Поэтому первое, что я делаю, — это проверяю, существует ли пользователь с предоставленными учетными данными. Я тщательно проверил проверку и уверен, что моей проблемы там нет.

Если эта проверка возвращает значение false, то скрипт продолжает создавать пользователя.

 public function registerUser() {
 parse_str($_SERVER['QUERY_STRING'], $data);
 $data = (object) $data;

 $check = json_decode($this->checkUserExists($data->email));

 if ($check->res) {
  $res = new stdClass();
  $res->res = false;
  $res->user_status = $check->user_status;
  $res->msg = 'User exists.';
  echo json_encode($res);
 }

 if (!$check->res) {
  $this->createUser($data);
 }
}
 

Проблема возникает после того, как все запросы были выполнены, сценарий, похоже, не хочет запускать оператор if внизу. Я пометил его символами комментариев, чтобы его было легче найти, но для ясности я включил всю функцию, возможно, я делаю что-то, что вызывает проблему.

Я пытался вызвать ошибку вручную в разных точках сценария. И я могу вызвать ошибку вплоть до конца сценария.

 private function createUser($data) {
 $Crypt = new CryptController();
 $AuthSelect = new AuthController();
 $Time = new TimeController();
 $remote_address = new RemoteAddressController();
 $Session = new SessionController();
 $AuthInsert = new AuthModel_Insert();

 $hashed_password = $Crypt->create_hash($data->password);
 $data->password = '';
 $AuthData = json_decode($AuthSelect->getAuth());
 $system_auth_id = $AuthData->system_auth_id;

 $user_id = $Crypt->get_uuid();
 $user_auth_id = $Crypt->get_uuid();
 $user_createddate = $Time->time();
 $user_updateddate = $Time->time();
 $user_lastupdateddate = $Time->time();

 $agent_ip = $remote_address->getIpAddress();

 $userData = $this->createUserObject(
  $user_id,
  $user_auth_id,
  $system_auth_id,
  $hashed_password,
  $user_createddate,
  $user_updateddate,
  $user_lastupdateddate,
  $data
 );

 $agentData = $this->createAgentObject(
  $user_id,
  $agent_ip,
  $data
 );
 //////////////////////////////////////////
 $create_user = $AuthInsert->createNewUser(
  $userData
 );

 $create_user_agent = $this->setUserAgent(
  $agentData
 );

 $sessionKeyData = new stdClass();
 $sessionKeyData->user_id = $user_id;
 $sessionKeyData->user_auth_id = $user_auth_id;
 $sessionKeyData->system_auth_id = $system_auth_id;
 $sessionKeyData->agent_id = $create_user_agent->agent->agent_id;

 $set_session_key = $Session->setSessionKey(
  $sessionKeyData
 );

 $send_activation_email = $this->createUserActivation(
  $userData
 );

 if (
  $create_user amp;amp;
  $create_user_agent->res amp;amp;
  $set_session_key->res amp;amp;
  $send_activation_email->res) {
  $res = new stdClass();
  $res->res = true;
  $res->msg = 'New user successfully created.';
  echo json_encode($res);
 } else {
  $res = new stdClass();
  $res->res = false;
  $res->msg = 'Error: User creation process incomplete.';
  echo json_encode($res);
 }
 //////////////////////////////////////////
 trigger_error("Invoked Error: ",E_USER_ERROR);
}
 

Сами запросы выполняются просто отлично, все таблицы заполняются просто отлично. Проблема в том, что после этого сценарий не завершается. Кажется, что он завершает createUser() функцию и возвращается к registerUser() функции, в которой пользователь будет существовать, поэтому он вернет значение false и передаст его клиенту.

В моем тестировании кажется, что моя проблема может быть в самом низу с этим утверждением if. Но я протестировал каждый из этих запросов по отдельности, и они действительно возвращают нужные логические значения для получения true условия. Но даже false условие не проходит, которое должно вернуться 'Error: User creation process incomplete.' . Этого тоже не происходит.

Я надеюсь, что кто-то видит то, чего мне не хватает, потому что я слишком долго застрял на этой проблеме. Я ценю любое руководство, которое может привести меня к ответу. Заранее спасибо.

Просто для уточнения, сообщение, которое я получаю в ответ $res->msg = 'User exists.'; , исходит от registeruser() . Сообщение, которое я ожидаю получить в ответ $res->msg = 'New user successfully created.'; , должно исходить от createUser() вас .

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

1. вы искали в журналах какие-либо ошибки, о которых сообщается? Включена ли функция отчетов об ошибках?

2. что вы имеете в виду под it seems that this query is doing something funny

3. Извините за задержку, вчера был долгий день. У меня включена регистрация, и журналы показали только, что у меня возникла проблема со сценарием почтовой рассылки, которую я исправил, и эта проблема все еще сохраняется. После устранения проблемы с почтовым отправителем я не получаю никаких новых журналов ошибок, и проблема все еще сохраняется. Однако я не уверен, что проблема больше в запросах, возможно, это мой синтаксис, но я не вижу в этом ничего плохого, поэтому мне нужна еще одна пара глаз.

4. @Самозваный синдром

5. если вы var_dump($check) , то каков результат