Ошибка: «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка.».Проблема в .env или PDO? - PullRequest
0 голосов
/ 25 января 2019

Я исправляю чужой код и получаю

"SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в вашем синтаксисе SQL "ошибка.

Моей первой мыслью было, что я неправильно установил slim, но повторная установка не имела никакого значения. Так что, возможно, проблема в файле .env или PDO. Кто-нибудь может помочь?

enter image description here

PDO:


declare(strict_types=1);

namespace App\Model;

use PDO;

abstract class PdoModel
{
   protected static $connection;

   protected function getConnection() : PDO
   {
       // Singleton pattern to use just 1 DB connection for all database calls
       if (!self::$connection) {
           self::$connection = new PDO('mysql:host=' . getenv('DB_HOST') . ';dbname=' . getenv('DB_DATABASE'), getenv('DB_USERNAME'), getenv('DB_PASSWORD'));
           self::$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
           self::$connection->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
       }

       return self::$connection;
   }
}   

.env:

DB_HOST=localhost
DB_DATABASE=exam
DB_USERNAME=root
DB_PASSWORD=
DB_PORT=3306    

первая часть eventmodel:


declare(strict_types=1);

namespace App\Model;

use DateTime;

class EventModel extends PdoModel
{
 public function getEvents() : array
 {
     $query = "SELECT e.id,e.name,e.description,e.event_manager_id,em.name as event_manager_name ,
     e.company_name,DATE_FORMAT(datetime,'%d-%m-%Y') as date,DATE_FORMAT(datetime,'%H:%i') as time,
      e.maximum_amount_of_guests as guests,
               FROM event e LEFT JOIN event_manager em ON (em.id = e.event_manager_id) ORDER BY date DESC";
     $statement = $this->getConnection()->prepare($query);
     $statement->execute();
     return $statement->fetchAll();
 }    

Любые предложения приветствуются. Я понятия не имею, в чем может быть проблема.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

В вашем запросе у вас есть лишняя запятая перед FROM

Правильный запрос:

SELECT 
    e.id,
    e.name,
    e.description,
    e.event_manager_id,
    em.name as event_manager_name,
    e.company_name,
    DATE_FORMAT(datetime,'%d-%m-%Y') as date,
    DATE_FORMAT(datetime,'%H:%i') as time,
    e.maximum_amount_of_guests as guests
FROM event e 
LEFT JOIN event_manager em ON (em.id = e.event_manager_id) 
ORDER BY date DESC

Ошибка в вашем запросе:

У вас есть проблема здесь:

e.maximum_amount_of_guests as guests, // this will generate error
               FROM event e

1064 ясно показывает, что в вашем запросе есть проблема, а не файл .env.

Ссылка на ошибку сервера:

0 голосов
/ 25 января 2019
SELECT e.id,e.name,e.description,e.event_manager_id,em.name as event_manager_name ,
     e.company_name,DATE_FORMAT(datetime,'%d-%m-%Y') as date,DATE_FORMAT(datetime,'%H:%i') as time,
      e.maximum_amount_of_guests as guests
               FROM event e LEFT JOIN event_manager em ON (em.id = e.event_manager_id) ORDER BY date DESC

В вашем запросе была синтаксическая ошибка.Ошибка была довольно прямой к этому.Ваш env файл в порядке.

...