2016-03-02 99 views
1

首先我知道外键的错误是什么,但是我不知道为什么它会在PDO的PHP代码中发生。1452>外键约束失败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,约束fk_cliente外键(cod_cliente)参考文献clientecod_cliente)ON DELETE NO ACTION ON UPDATE NO ACTION))

前面说过,已经我检查已经在phpmyadmin的手动添加的cod_cliente存在和有效。

+0

好吧,它不能在那里,或不是一个完全匹配的,所以mysql正确拒绝插入。仅仅因为在phpmyadmin中看起来相同的东西并不意味着实际的值。尝试像从客户那里选择导致该错误的确切值相同的值,例如'select * from client where cod_client =?'并绑定完全相同的$ _POST值。 –

+1

不要引用占位符。引用时,'?'是文字'?'。 – chris85

+0

@ chris85是对的,也许你的问题只是占位符,将它改为:'(?,?,?,?)' –

回答

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