1452>外键约束失败PDO PHP

时间:2016-03-02 19:29:28

标签: php mysql pdo

首先我知道外键的错误是什么,但是我不知道为什么它会在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] =>无法添加或更新子行:外键约束失败(empresapedido ,CONSTRAINT fk_cliente FOREIGN KEY(cod_cliente)REFERENCES clientecod_cliente)ON DELETE NO ACTION更新无行动))

正如我之前所说的那样,我已经检查了已经在 phpmyadmin 中手动添加的cod_cliente的存在,并且它有效。

1 个答案:

答案 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是默认类型。