【问题标题】:SQLSTATE[HY093]: Invalid parameter number: no parameters were boundSQLSTATE[HY093]:参数号无效:未绑定参数
【发布时间】:2016-10-30 15:06:57
【问题描述】:

我在尝试运行以下函数时收到错误“SQLSTATE[HY093]: Invalid parameter number”:

public function showAction(Post $post, Request $request){

    $comment = new Comment();
    $comment->setPost($post);

    //comment->setUser($user);

    $form  = $this->createForm(CommentType::class, $comment); /*obiekt formularza */
    $form->handleRequest($request);


    if($form->isValid()){
        $em = $this->getDoctrine()->getManager();
        $em->persist($comment);
        $em->flush('success', 'Komentarz został pomyślnie dodany');

        $this->addFlash();

        return $this->redirectToRoute('post_show', array('id' =>$post->getId()));
    }


    return $this->render('default/show.html.twig', array(
        'post' => $post,
        'form' => $form->createView()
    ));
}

我的 CommentTye 表单:

class CommentType extends AbstractType
{
/**
 * @param FormBuilderInterface $builder
 * @param array $options
 */
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('content', \Symfony\Component\Form\Extension\Core\Type\TextareaType::class, array(
            'label' => false,
            'attr' => array('placeholder' => 'Treść komentarza')
        ))
        ->add('createdAt')
        ->add('post')
        ->add('user')
        ;
}

/**
 * @param OptionsResolverInterface $resolver
 */
public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => 'AppBundle\Entity\Comment'
    ));
}

/**
 * @return string
 */
public function getName()
{
    return 'appbundle_comment';
}
}

当我运行它时,我得到了

Message: An exception occurred while executing 'INSERT INTO comment (content, created_at, post_id, user_id) VALUES (?, ?, ?, ?)':

SQLSTATE[HY093]:参数号无效:没有绑定参数

请帮我解决这个问题

【问题讨论】:

  • 请修复您的问题中的代码块(代码使用 4 空格缩进)- 这样不可读。
  • 对不起,这是我的第一篇文章。
  • 尝试不带参数调用$em->flush()。实际上第一个也是唯一的参数是$entity,你不应该在那里提供“成功”。
  • 它不起作用。我收到新消息:警告:缺少 Symfony\Bundle\FrameworkBundle\Controller\Controller::addFlash() 的参数 1,在 C:\xampp\htdocs\sfBlog\sfBlog\src\AppBundle\Controller\DefaultController.php 中调用第 76 行并定义(第 76 行是 $this->addFlash(); )
  • $em->flush() 中删除两个字符串,并将它们添加到$this->addFlash('success', 'Komentarz został pomyślnie dodany')

标签: php symfony


【解决方案1】:

您混淆了刷新实体管理器和添加flash消息。

代替:

$em->flush('success', 'Komentarz został pomyślnie dodany');
$this->addFlash();

你想要:

$em->flush();
$this->addFlash('success');
$this->addFlash('Komentarz został pomyślnie dodany');

【讨论】:

  • 我的情况完全相同:您能解释一下为什么将闪存消息与刷新操作混合会导致此异常吗?因为我这样做是为了保存消息的数据库版本并在页面重新加载后立即显示它。我想知道原因。谢谢!
  • 如果flash消息存储在会话中,flush操作对数据库进行操作,两者的关系是什么?
  • @Aerendir 两者之间没有关系。 Symfony 的会话存储(php-session、memcached、redis、...)和 DBAL 存储(doctrine-orm/odm、...)是两个完全独立的层。
  • 是的,你是对的......我误读了回复......我知道它们是完全独立的层,因此我不明白为什么闪存消息会导致刷新异常...... . 再次阅读我发现这不是我的情况...无论如何谢谢您的回复。
猜你喜欢
  • 2012-06-13
  • 1970-01-01
  • 2012-04-15
  • 2020-03-18
  • 2016-11-28
相关资源
最近更新 更多