【发布时间】: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