Я получаю эту ошибку, и мне нужна помощь. Я застрял на этом в течение долгого времени, и мне кажется, что проблема в том, что я смотрю в лицо.Неизвестный столбец 'problem_id' в 'списке полей'
Это моя структура базы данных. Я использую MySQL
mysql> describe user_supplied_problem_solution;
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| user_id | int(10) unsigned | NO | MUL | NULL | |
| problem_id | int(10) unsigned | NO | MUL | NULL | |
| solution | text | NO | | NULL | |
+------------+------------------+------+-----+---------+----------------+
Это PHP код, который я получаю ошибку при запуске:.
public function createSolution($description, $user_id, $part_order = NULL) {
$solution_id = NULL;
if(!isset($part_order)) {
print("running the problem level query\n"); // Debug
$query = "INSERT INTO user_supplied_problem_solution (problem_id, user_id, solution)
VALUES (:problem_id, :user_id, :solution)";
} else {
print("running the part level query\n"); // Debug
$query = "INSERT INTO user_supplied_part_solution (user_id, part_id, solution)
VALUES (:user_id, :part_id, :solution)";
}
$this->dbh->beginTransaction();
try {
$statement = $this->dbh->prepare($query);
if(!isset($part_order)) {
print($query . PHP_EOL); // Debug
print("running the problem level binding\n"); // Debug
print("The problem ID is $this->problem_id\n"); // Debug
$statement->bindParam(':problem_id', $this->problem_id, PDO::PARAM_INT);
} else {
// Get the part_id
$part_id = $this->getPartIdFromOrder($part_order);
if(!$part_id) {
// Part_id does not exist -- rollback and return
$this->dbh->rollBack();
return false;
}
$statement->bindParam(':part_id', $part_id, PDO::PARAM_INT);
}
$statement->bindParam(':user_id', $user_id, PDO::PARAM_INT);
$statement->bindParam(':solution', $description, PDO::PARAM_STR);
$statement->execute();
$solution_id = $this->dbh->lastInsertId();
} catch(PDOException $e) {
$this->dbh->rollBack();
print_r($e->errorInfo); // Debug
return false;
}
$this->dbh->commit();
describe user_supplied_problem_solution;
Обратите внимание на (отладки) print
команды я вставил в Я оставил их в, чтобы показать вам выполнение кода. Это часть объекта, в котором $this->dbh
создается правильно при построении. Я выполнил этот запрос через командную строку, и он был успешным. Это был мой выход:
mysql> INSERT INTO user_supplied_problem_solution (problem_id, user_id, solution)
-> VALUES (130, 40, "Solution");
Query OK, 1 row affected (0.00 sec)
Это то, что я получил, когда я побежал код выше с помощью метода подписи createSolution("this is a test solution", 40)
:
running the problem level query
INSERT INTO user_supplied_problem_solution (problem_id, user_id, solution)
VALUES (:problem_id, :user_id, :solution)
running the problem level binding
The problem ID is 130
Array
(
[0] => 42S22
[1] => 1054
[2] => Unknown column 'problem_id' in 'field list'
)
Я извиняюсь за то, как долго это, но я знаю, первый ответ на такие вопросы, как люди, запрашивают дополнительную информацию.
действительно выбирает это поле, php работает правильно. Вы должны запустить свой описательный запрос через PHP и распечатать результаты. Возможно ли, что у вас есть копия базы данных, к которой вы подключены, и т. Д., Вы должны проверить структуру, которую получает PHP. – ArtisticPhoenix
Это длинный снимок, но пользователь, который вы используете с PHP, имеет правильные привилегии. В противном случае все выглядит отлично. – ArtisticPhoenix
Вы уверены, что получаете доступ к той же БД в коде, что и при ручной проверке? – MaxZoom