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] =>無法添加或更新的子行,外鍵約束失敗(
empresa
。pedido
,約束fk_cliente
外鍵(cod_cliente
)參考文獻cliente
(cod_cliente
)ON DELETE NO ACTION ON UPDATE NO ACTION))
前面說過,已經我檢查已經在phpmyadmin的手動添加的cod_cliente
存在和有效。
好吧,它不能在那裏,或不是一個完全匹配的,所以mysql正確拒絕插入。僅僅因爲在phpmyadmin中看起來相同的東西並不意味着實際的值。嘗試像從客戶那裏選擇導致該錯誤的確切值相同的值,例如'select * from client where cod_client =?'並綁定完全相同的$ _POST值。 –
不要引用佔位符。引用時,'?'是文字'?'。 – chris85
@ chris85是對的,也許你的問題只是佔位符,將它改爲:'(?,?,?,?)' –