Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY000]: общая ошибка в «расположении» трассировки стека: # 0 - PullRequest
0 голосов
/ 26 декабря 2018

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

В настоящее время я изучаю PHP и изучаю его, редактируя существующий код.Так что это не мой код с самого начала.Во всяком случае, этот код работал отлично на прошлой неделе.У меня нет воспоминаний о том, чтобы его редактировать.Теперь, когда я тестирую его, он дает мне фатальную ошибку (ту, что в названии).Он жалуется на код "register.php (50): PDOStatement-> fetchAll () # 1"

код:

<?php


include('database_connection.php');

if(isset($_SESSION['user_id']))
{
 header("location:index.php");
}

$message = '';

if(isset($_POST["register"]))
{
 $query = "
 SELECT * FROM users 
 WHERE user_email = :user_email
 ";
 $statement = $connect->prepare($query);
 $statement->execute(
  array(
   ':user_email' => $_POST['user_email']
  )
 );
 $no_of_row = $statement->rowCount();
 if($no_of_row > 0)
 {
  $message = '<label class="text-danger">Email Already Exits</label>';
 }
 else
 {
  $user_password = rand(100000,999999);
  $user_encrypted_password = password_hash($user_password, PASSWORD_DEFAULT);
  $user_activation_code = md5(rand());
  $insert_query = "
  INSERT INTO users
  (user_name, user_email, user_password, user_activation_code, user_email_status) 
  VALUES (:user_name, :user_email, :user_password, :user_activation_code, :user_email_status)
  ";
  $statement = $connect->prepare($insert_query);
  $statement->execute(
   array(
    ':user_name'   => $_POST['user_name'],
    ':user_email'   => $_POST['user_email'],
    ':user_password'  => $user_encrypted_password,
    ':user_activation_code' => $user_activation_code,
    ':user_email_status' => 'not verified'
   )
  );
  $result = $statement->fetchAll();
  if(isset($result))
  {

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

Я знаю, что я не очень хорош, но я пытаюсь учиться и хотел бы знатьгде я запутался.Спасибо

1 Ответ

0 голосов
/ 26 декабря 2018

execute() возвращает true, если вставка прошла успешно.Таким образом, вам не нужно извлекать результат, но вместо этого сделайте следующее:

$dbSuccess = $statement->execute(
...
);
if ($dbSuccess === true) {
...

Вы также можете использовать $statement->errorCode(), чтобы проверить, была ли ваша INSERT успешной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...