【问题标题】:PDO insert query issue inside a For loopPDO 在 For 循环中插入查询问题
【发布时间】:2014-10-03 13:49:41
【问题描述】:

我是 PDO 的新手,遇到了下面这个问题。基本上,我无法找出我的代码到底出了什么问题:我的 foreach 循环中的插入查询没有在我的数据库中插入任何内容。也许我没有以正确的方式编码。我需要我的客户回答一个动态表单,其中所有字段都使用 mysql 显示,我认为使用 foreach 循环会更方便。无论如何,事实证明这比我预期的要困难得多。这是我的代码...(cmets 和变量用葡萄牙语标注,如果您难以理解,请让我翻译)

编辑 #1 - 根据你们的建议进行了一些更改...仍然无法正常工作。

<?php
    if (isset($_POST["nome"])):
        try{
            // Começo da validação
            $pdo->beginTransaction();
            // Validação do campo nome
            if ($_POST["nome"] != null):
                $procurarnome=$pdo->prepare("SELECT id FROM users WHERE username=:username");
                $procurarnome->bindValue(":username",$name);
                $procurarnome->execute();
            else:
                die("Houve um erro no sistema, contate um administrador!");
            endif;
            // Validação dos campos dinâmicos
            foreach ($listarpergunta as $pergunta) {
                if ($_POST["pergunta$pergunta->id"] != null):
                    $resposta=addslashes($_POST["pergunta$pergunta->id"]);
                    $cadastraresposta=$pdo->prepare("INSERT INTO form_respostas(perguntaid,username,reposta)VALUES(:perguntaid,:username,:resposta)");
                    $cadastraresposta->bindValue(":perguntaid",$pergunta->id,PDO::PARAM_INT);
                    $cadastraresposta->bindValue(":username",$name);
                    $cadastraresposta->bindValue(":resposta",$resposta);
                    $cadastraresposta->execute();
                    echo $resposta;
                    echo "<br />";
                else:
                    $pdo->rollBack();
                    die("Preencha todos os campos corretamente!<br />");
                endif;
            }
            // Todos os arquivos foram preenchidos corretamente
            $pdo->commit();
            echo "Obrigado!";
        }
        catch(PDOException $pe){
             //$pdo->rollback();
             die($pe->getMessage());
        }
    else:
?>

当我单击提交表单时,我收到“Obrigado”消息,但 db 没有任何反应。如果我将任何字段留空,它会显示“Preencha todos os campos”(所有字段都需要填写)所以我想代码的特定部分没有问题......

【问题讨论】:

  • 避免使用全部大写的标题(以及与此相关的问题文本)。有些人对此表示反对。
  • 为什么在查询中传递$name而不绑定它?此外,请尝试插入查询,而不使用引号作为列名。
  • 对不起,这不会再发生了,你能帮我解决这个问题吗?
  • 我会试试的。关于查询,我之前尝试过,实际上我将其更改为这个,因为它也不起作用。
  • 在 if/else 结构中使用大括号 { } 而不是冒号 :。不要在事务中使用 die。

标签: php mysql pdo foreach insert


【解决方案1】:

这是您的代码中的一些问题:

$listarpergunta 变量在哪里初始化?

并更改您的查询:
INSERT INTO form_respostas(perguntaid,username,reposta)VALUES(:perguntaid,:username,:resposta)

到:

INSERT INTO form_respostas(perguntaid,username,reposta) VALUES (:perguntaid,:username,:resposta)

(添加空格)

【讨论】:

  • $listarpergunta 工作得很好,它在这部分代码的上方,我使用 SELECT 查询来显示字段。 " // Busca as perguntas referentes a form ID $buscapergunta=$pdo->prepare("SELECT * FROM form_perguntas WHERE formid=:formid"); $buscapergunta->bindValue(":formid",$defineid->id,PDO ::PARAM_INT); $buscapergunta->execute(); // 准备一个变量 buscapergunta para listagem $listarpergunta=$buscapergunta->fetchAll(PDO::FETCH_OBJ);"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2023-03-10
  • 2015-08-12
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多