首先我知道外键的错误是什么,但是我不知道为什么它会在PDO的PHP代码中发生。
插入功能:
function insert_pedido($cod,$pagamento,$total) {
$id = $cod;
$con = $this->connect();
$data = date("Y/m/d");
$DBH = $con->prepare("INSERT INTO pedido (cod_cliente, data, pagamento, total) VALUES ('?','?','?','?')");
$DBH->bindParam(1,$id);
$DBH->bindParam(2,$data);
$DBH->bindParam(3,$pagamento);
$DBH->bindParam(4,$total);
if ($DBH->execute()) {
return 1;
} else {
print_r($DBH->errorInfo());
}
}
我让函数调用传递这些参数
$cod = $_POST["cod_cliente"];
$pagamento = $_POST["pagamento"];
$total = $_POST["total"];
函数调用:
insert_pedido($cod,$pagamento,$total);
这是收到的错误:
数组([0] => 23000 [1] => 1452 [2] =>无法添加或更新子行:外键约束失败(
empresa
。pedido
,CONSTRAINTfk_cliente
FOREIGN KEY(cod_cliente
)REFERENCEScliente
(cod_cliente
)ON DELETE NO ACTION更新无行动))
正如我之前所说的那样,我已经检查了已经在 phpmyadmin 中手动添加的cod_cliente
的存在,并且它有效。
答案 0 :(得分:2)
占位符不是字符串。它们应该是不加引号的:
$DBH = $con->prepare("
INSERT INTO pedido (cod_cliente, data, pagamento, total)
VALUES (?, ?, ?, ?)
");
PDO将处理将输入转换为必要值的过程。您可以通过指定类型来帮助确保提交正确类型的数据:
$DBH->bindParam(1, $id, PDO::PARAM_INT);
$DBH->bindParam(2, $data, PDO::PARAM_STR);
PDO::PARAM_STR
是默认类型。