Error: "SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax. ". Problem in the .env or PDO?

Error: "SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax. ". Problem in the .env or PDO?

我正在修复其他人的代码并得到

"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax" error.

我的第一个想法是我没有正确安装 slim,但是重新安装没有任何区别。所以问题可能出在 .env 文件或 PDO 中。谁能帮忙?

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    

事件模型的第一部分:


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();
 }    

欢迎提出任何建议。我不知道问题可能是什么。

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 文件没问题。

在您的查询中,您在 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 文件。

Server Error Reference: