javascript - 使用 INSERT INTO 的 SQL 请求出错

标签 javascript php sql symfony

当我尝试将数据从我的 Controller 放入我的数据库时出现错误,其中包含一个包含文本的表单。我检查了每个变量,没有一个是空的。因此,当我提交表单时,出现此错误:

SyntaxErrorException: An exception occurred while executing 'INSERT INTO message (message, vu, from, date, type, id_player) VALUES (?, ?, ?, ?, ?, ?)' with params ["ds", 0, "jean3", "2017-05-05 18:04:39", "message", 7]:

而且我不明白为什么我的打字可能是错误的,它应该是 (String, boolean, String, datetime, String, int)。 int 是一个外键,所以我为最后一行(setIdPlayer 和 setPlayer)在我的 Controller 中设置了 ID 和实体 int。

这是我的 Controller :

public function carteAction(Request $request)
    {


        $player = $this->container->get("security.token_storage")->getToken()->getUser();
        $message = new Message;
        //dump($player->getCharacters());
        

        $form = $this->createFormBuilder($message)
            ->add('message', TextareaType::class, array('label' => 'Message :'))
            ->add('registration', SubmitType::class, array('label' => 'Envoie du message'))
            ->getForm();

        $form->handleRequest($request);

        if($form->isSubmitted() && $form->isValid())
        {
            if($request->query->has('to'))
            {
                dump("sending...");
                $message->setMessage($form['message']->getData());
                $message->setFrom($player->getUsername());
                $message->setVu(false);
                $message->setDate(date_create());
                $message->setType("message");
                $to = $this->getDoctrine()->getRepository('AppBundle:Player')
                            ->findByPseudo($request->query->get('to'))[0];
                $id_to = $to->getId();
                dump($id_to);
                dump($to);
                $message->setIdPlayer($id_to);
                $message->setPlayer($to);
                
                //TODO : get to depuis la database et lui foutre le message
                $em = $this->getDoctrine()->getManager();
                $em->persist($message); // prépare l'insertion dans la BD
                $em->flush();
            }
            


        }
       
    }

然后我的消息实体:

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Message
 *
 * @ORM\Table(name="message")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\MessageRepository")
 */
class Message
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="message", type="text")
     */
    private $message;

    /**
     * @var bool
     *
     * @ORM\Column(name="vu", type="boolean")
     */
    private $vu;

    /**
     * @var string
     *
     * @ORM\Column(name="from", type="string")
     */
    private $from;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="datetime")
     */
    private $date;

    /**
     * @var string
     *
     * @ORM\Column(name="type", type="string", length=255)
     */
    private $type;

    /**
     * @var int
     * @ORM\ManyToOne(targetEntity="Player", inversedBy="messages")
     * @ORM\JoinColumn(name="id_player", referencedColumnName="id")
     */
    private $player;

    /**
     * @var int
     * @ORM\Column(name="id_player", type="integer")
     */
    private $idPlayer;

    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set message
     *
     * @param string $message
     *
     * @return Message
     */
    public function setMessage($message)
    {
        $this->message = $message;

        return $this;
    }

    /**
     * Get message
     *
     * @return string
     */
    public function getMessage()
    {
        return $this->message;
    }

    /**
     * Set from
     *
     * @param string $from
     *
     * @return Message
     */
    public function setFrom($from)
    {
        $this->from = $from;

        return $this;
    }

    /**
     * Get from
     *
     * @return string
     */
    public function getFrom()
    {
        return $this->from;
    }

    /**
     * Set vu
     *
     * @param boolean $vu
     *
     * @return Message
     */
    public function setVu($vu)
    {
        $this->vu = $vu;

        return $this;
    }

    /**
     * Get vu
     *
     * @return bool
     */
    public function getVu()
    {
        return $this->vu;
    }

    /**
     * Set date
     *
     * @param \DateTime $date
     *
     * @return Message
     */
    public function setDate($date)
    {
        $this->date = $date;

        return $this;
    }

    /**
     * Get date
     *
     * @return \DateTime
     */
    public function getDate()
    {
        return $this->date;
    }

    /**
     * Set type
     *
     * @param string $type
     *
     * @return Message
     */
    public function setType($type)
    {
        $this->type = $type;

        return $this;
    }

    /**
     * Get type
     *
     * @return string
     */
    public function getType()
    {
        return $this->type;
    }

    /**
     * Set player
     *
     * @param \AppBundle\Entity\Player $player
     *
     * @return Message
     */
    public function setPlayer(\AppBundle\Entity\Player $player = null)
    {
        $this->player = $player;

        return $this;
    }

    /**
     * Get player
     *
     * @return \AppBundle\Entity\Player
     */
    public function getPlayer()
    {
        return $this->player;
    }

    /**
     * Set idPlayer
     *
     * @param int $idPlayer
     *
     * @return Message
     */
    public function setIdPlayer($idPlayer)
    {
        $this->idPlayer = $idPlayer;

        return $this;
    }

    /**
     * Get idPlayer
     *
     * @return int
     */
    public function getIdPlayer()
    {
        return $this->idPlayer;
    }
}

感谢您的帮助。

编辑:我在没有 idplayer 的情况下尝试过,但我遇到了同样的错误。

编辑 2:可能是因为我的播放器实体中有一些空值?但我真的不知道它们是什么(这些不是我的实体类中的值)。这是在我执行查询之前 dump() 为我的播放器显示的内容:

Player {#496 ▼
  #id: 13
  -pseudo: "jean3"
  #email: "cava@gmail.com"
  #password: "0f22f0605b46b21c396d3aebe9b787bee7bbd3b31ca3548dfa5a8a6c2ec090de"
  -dateLog: DateTime {#493 ▶}
  -characters: PersistentCollection {#523 ▶}
  -messages: PersistentCollection {#549 ▶}
  #salt: "380012397590c3fc630f46"
  #_entityName: null
  #_em: null
  #_class: null
}

最后 3 个参数为 null,但就像我说的,这些不是我自己创建的

最佳答案

我有一个语法错误,因为我有一个名为“日期”的列,它是 SQL 中的保留字!所以我只是重命名了我的专栏并且它起作用了。

编辑:同样适用于 from AND type !...

关于javascript - 使用 INSERT INTO 的 SQL 请求出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43809698/

相关文章:

javascript - 刷新下拉菜单更改javascript

javascript - 如何使 html 卡片对齐到行和列中?

php - 计算时间粒度

mysql - 获取列中变量匹配的表名

javascript - 虽然函数陷入循环,但循环的一半似乎没有执行

javascript - 如何使用 PHP 变量运行 JavaScript

php - 控制数据是否存在于数组中

php - 如何通过选中复选框从 Twig 中的表中获取数据

sql - 查询同一服务器上不同数据库中的两个表

c# - 用于管理 SQL 表中位置的算法