#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 = ?