मुझे एक त्रुटि है जब मैं अपने डेटाबेस में डेटा को अपने नियंत्रक से एक फॉर्म के साथ डालने का प्रयास करता हूं जिसमें एक टेक्स्ट होता है। मैंने प्रत्येक चर की जाँच की और उनमें से कोई भी शून्य नहीं है। तो जब मैं अपना फॉर्म जमा करता हूं, तो मुझे यह त्रुटि मिलती है:

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]:

और मैं नहीं देखता कि मेरा टाइपपेज गलत क्यों हो सकता है, यह माना जाता है (स्ट्रिंग, बूलियन, स्ट्रिंग, डेटाटाइम, स्ट्रिंग, इंट)। और int एक विदेशी कुंजी है, इसलिए मैंने इस अंतिम पंक्ति (setIdPlayer और setPlayer) के लिए आईडी और इकाई को मेरे नियंत्रक में सेट किया है।

यहाँ मेरा नियंत्रक है:

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: क्या ऐसा इसलिए हो सकता है क्योंकि मेरे खिलाड़ी इकाई में कुछ शून्य मान हैं? लेकिन मैं वास्तव में नहीं जानता कि वे क्या हैं (ये वे मान नहीं हैं जो मेरी इकाई वर्ग में हैं)। प्रश्न करने से पहले मेरे खिलाड़ी के लिए डंप() शो यहां दिया गया है:

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 पैरामीटर शून्य हैं, लेकिन जैसा कि मैंने कहा कि मैंने इन्हें स्वयं नहीं बनाया है

1
Zul Huky 5 मई 2017, 19:24
वास्तव में सब कुछ ठीक लगता है, उस क्वेरी को सीधे कुछ sql gui या mysql कंसोल में निष्पादित करने का प्रयास करें और देखें कि यह क्या कह रहा है।
 – 
num8er
5 मई 2017, 19:29
1
मुझे समझ में नहीं आता कि आप private का उपयोग कई-से-एक संबंध विशेषता के रूप में क्यों करते हैं, और IdPlayer को पूर्णांक के रूप में (समान जॉइन कॉलम के साथ) क्यों उपयोग करते हैं। player is enough. आपके पास सीधे एक सेटप्लेयर हो सकता है
 – 
Adib Aroui
5 मई 2017, 19:49
जब मैं phpmyadmin में इस क्वेरी को आज़माता हूँ तो मुझे भी यही त्रुटि होती है
 – 
Zul Huky
5 मई 2017, 20:17

1 उत्तर

सबसे बढ़िया उत्तर

मेरे पास एक सिंटैक्स त्रुटि थी क्योंकि मेरे पास "दिनांक" नामक एक कॉलम है, और यह SQL में एक आरक्षित शब्द है! तो मैंने अभी अपना कॉलम बदल दिया है और यह काम करता है।

संपादित करें: से और प्रकार के लिए समान!...

3
Zul Huky 6 मई 2017, 00:26