2017-02-16 4 views
0

Я получаю эту ошибку, и мне нужна помощь. Я застрял на этом в течение долгого времени, и мне кажется, что проблема в том, что я смотрю в лицо.Неизвестный столбец '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' 
) 

Я извиняюсь за то, как долго это, но я знаю, первый ответ на такие вопросы, как люди, запрашивают дополнительную информацию.

+0

действительно выбирает это поле, php работает правильно. Вы должны запустить свой описательный запрос через PHP и распечатать результаты. Возможно ли, что у вас есть копия базы данных, к которой вы подключены, и т. Д., Вы должны проверить структуру, которую получает PHP. – ArtisticPhoenix

+0

Это длинный снимок, но пользователь, который вы используете с PHP, имеет правильные привилегии. В противном случае все выглядит отлично. – ArtisticPhoenix

+0

Вы уверены, что получаете доступ к той же БД в коде, что и при ручной проверке? – MaxZoom

ответ

0

Решено - это было связано с кодом вне этого фрагмента. Я был слишком ограничен и смотрел на неправильный код. После выполнения этого запроса метод вызывает другой закрытый метод, в котором была проблема.

Извлеченный урок: не копируйте и не вставляйте весело и не делайте 10-минутный перерыв, если вы не можете что-то понять.

Смежные вопросы