#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)
, то каков результат