Возврат данных в поля ввода для операции обновления с использованием внутренних соединений

#php #mysql

#php #mysql

Вопрос:

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

Проблема в том, что когда я возвращаю такие значения, как имя, адрес электронной почты, телефон, это работает. Но когда я пытаюсь объединить свои таблицы так, чтобы для города у меня не было в поле ввода значения типа 159, которое является ключевым значением для определенного города в моей базе данных.

Это тормозит. Вывод этой ошибки.

Ошибка SQL

 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous' in ....PATH TO FILE......: PDOStatement->execute(Array) #1 {main} thrown in .....PATH TO FILE....... on line 98
  

Неработающий код

Здесь у вас есть код, который я запускаю в этой части скрипта.

      else {
        $pdo = Database::connect();
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $sql = "SELECT
  Users.id,
  Users.firstname,
  Users.lastname,
  Users.email,
  Users.age,
  Users.phone,
  Universities.univ AS university,
  Internship.internship_type AS Internship,
  Orase.oras AS city,
  Interes.interes AS interest,
  User_status.user_status AS userstatus,
  Users.filename,
  Users.account,
  Users.reg_date
FROM
  Users
INNER JOIN
  Orase ON Users.city = Orase.cheie
INNER JOIN
  Universities ON Users.university = Universities.id
INNER JOIN
  Interes ON Users.interest = Interes.cheie
INNER JOIN
  Internship ON Users.Internship_type = Internship.cheie
INNER JOIN
  User_status ON Users.user_status = User_status.id 
WHERE id = ?";
        $q = $pdo->prepare($sql);
        $q->execute(array($id));
        $data = $q->fetch(PDO::FETCH_ASSOC);
        $name = $data['firstname'];
        $lastname = $data['lastname'];
        $email = $data['email'];
        $age = $data['age'];
        $mobile = $data['phone'];
        $city = $data['city'];
        Database::disconnect();
    }
  

Код, который действительно работает

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

 else {
    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $sql = "SELECT * FROM Users where id = ?";
    $q = $pdo->prepare($sql);
    $q->execute(array($id));
    $data = $q->fetch(PDO::FETCH_ASSOC);
    $name = $data['firstname'];
    $lastname = $data['lastname'];
    $email = $data['email'];
    $age = $data['age'];
    $mobile = $data['phone'];
    $city = $data['city'];
    Database::disconnect();
}

?>
  

Изображение с формой с использованием рабочего кода

Изображение для контекста, чтобы вы поняли, почему я пытаюсь использовать внутренние соединения для названия города Изображение для контекста, чтобы вы поняли, почему я пытаюсь использовать внутренние соединения для названия города

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

1. Заменить WHERE id = ? на WHERE Users.id = ?

2. Pfff. Вы совершенно правы. 🙂 Не могу поверить, что я это пропустил. Я просто подумал, что ооо, но я выбираю пользователей так, чтобы ГДЕ id = ? должно работать. Спасибо @sef4eg

3. Давайте рассмотрим это как ответ 😉

Ответ №1:

Просто замените WHERE id = ? на WHERE Users.id = ?