Php 获取错误外键冲突
我在将数据插入数据库时遇到问题。它会得到如下错误:Php 获取错误外键冲突,php,mysql,pdo,Php,Mysql,Pdo,我在将数据插入数据库时遇到问题。它会得到如下错误: public function pengajuan_proposal($pengguna, $judul_pro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at, $topik_penelitian, $nidn, $nama_personil, $p
public function pengajuan_proposal($pengguna, $judul_pro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at, $topik_penelitian,
$nidn, $nama_personil, $prodi, $jen_pend, $jab_fung, $danus1, $danus2, $danus3, $danin1, $danin2,
$danin3){
$this->conn->beginTransaction();
try {
$query = $this->conn->prepare("INSERT INTO identitas_proposal
(id_pengguna, judul_pro, abstrak, keywords, lama_kegiatan, bidang_fokus)
VALUES (:id_pengguna, :judulpro, :abstrak, :keywords, :lamakegiatan, :bidangfokus)");
$query->bindParam(':id_pengguna', $pengguna, PDO::PARAM_STR);
$query->bindParam(':judulpro', $judul_pro, PDO::PARAM_STR);
$query->bindParam(':abstrak', $abstrak, PDO::PARAM_STR);
$query->bindParam(':keywords', $keywords, PDO::PARAM_STR);
$query->bindParam(':lamakegiatan', $lama_kegiatan, PDO::PARAM_STR);
$query->bindParam(':bidangfokus', $bidang_fokus_id, PDO::PARAM_STR);
$query->execute();
$lastInsertID = $this->conn->lastInsertId();
$query = $this->conn->prepare("INSERT INTO atribut_proposal
(id_pengguna, bidang_fokusatribut, topik_penelitian)
VALUES (:id_pengguna, :bidangfokusatribut, :topikpenelitian)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':bidangfokusatribut', $bidang_fokus_at, PDO::PARAM_STR);
$query->bindParam(':topikpenelitian', $topik_penelitian, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO daftar_personil
(id_pengguna, nidn, nama_personil, program_studi, jenjang_pend, jabatan)
VALUES (:id_pengguna, :nidn, :namapersonil, :programstudi, :jenjangpendidikan, :jabatan)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':nidn', $nidn, PDO::PARAM_STR);
$query->bindParam(':namapersonil', $nama_personil, PDO::PARAM_STR);
$query->bindParam(':programstudi', $prodi, PDO::PARAM_STR);
$query->bindParam(':jenjangpendidikan', $jen_pend, PDO::PARAM_STR);
$query->bindParam(':jabatan', $jab_fung, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO biaya_usulan
(id_pengguna, biaya_tahun1, biaya_tahun2, biaya_tahun3)
VALUES (:id_pengguna, :biayatahun1, :biayatahun2, biayatahun3)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':biayatahun1', $danus1, PDO::PARAM_STR);
$query->bindParam(':biayatahun2', $danus2, PDO::PARAM_STR);
$query->bindParam(':biayatahun3', $danus3, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO biaya_internal
(id_pengguna, biaya_tahun1in, biaya_tahun2in, biaya_tahun3in)
VALUES (:id_pengguna, :biayatahun1in, :biayatahun2in, biayatahun3in)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':biayatahun1in', $danin1, PDO::PARAM_STR);
$query->bindParam(':biayatahun2in', $danin2, PDO::PARAM_STR);
$query->bindParam(':biayatahun3in', $danin3, PDO::PARAM_STR);
$query->execute();
$this->conn->commit();
}
catch (PDOException $e){
$this->conn->rollBack();
echo $e->getMessage();
var_dump($this->conn->errorInfo());
}
return true;
}
}
<?php
require_once __DIR__ . "/../class.proposal.php";
$proposal = new PROPOSAL();
if (isset($_POST['submit'])){
$pengguna = $_SESSION['userSession'];
$judulpro = $_POST['judulproposal'];
$abstrak = $_POST['abstrak'];
$keywords = $_POST['keywords'];
$lama_kegiatan = $_POST['lamakegiatan'];
$bidang_fokus_id = $_POST['bidangfokusid'];
$bidang_fokus_at = $_POST['bidangfokusat'];
$topik_penelitian = $_POST['topik'];
$nidn = $_POST['nidn'];
$nama_personil = $_POST['namapersonil'];
$program_studi = $_POST['programstudi'];
$jenjang_pendidikan = $_POST['jenjangpendidikan'];
$jabatan = $_POST['jabatan'];
$biaya_tahun1us = $_POST['danus1'];
$biaya_tahun2us = $_POST['danus2'];
$biaya_tahun3us = $_POST['danus3'];
$biaya_tahun1in = $_POST['danin1'];
$biaya_tahun2in = $_POST['danin2'];
$biaya_tahun3in = $_POST['danin3'];
try {
if($proposal->pengajuan_proposal($pengguna, $judulpro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at,
$topik_penelitian, $nidn, $nama_personil, $program_studi, $jenjang_pendidikan,
$jabatan, $biaya_tahun1us, $biaya_tahun2us, $biaya_tahun3us, $biaya_tahun1in,
$biaya_tahun2in, $biaya_tahun3in)){
}
}
catch (PDOException $e){
echo $e->getMessage();
}
}
?>
SQLSTATE[23000]:完整性约束冲突:1452无法添加或
更新子行:外键约束失败
(sipp-litbang1
atribut\u提案
,约束FKATRIBUT提案
外键(id\u pengguna
)引用删除级联上的用户(id
)
在更新级联时)数组(3){[0]=>string(5)“00000”[1]=>NULL[2]=>
空}
我创建了插入数据的方法,如下所示:
public function pengajuan_proposal($pengguna, $judul_pro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at, $topik_penelitian,
$nidn, $nama_personil, $prodi, $jen_pend, $jab_fung, $danus1, $danus2, $danus3, $danin1, $danin2,
$danin3){
$this->conn->beginTransaction();
try {
$query = $this->conn->prepare("INSERT INTO identitas_proposal
(id_pengguna, judul_pro, abstrak, keywords, lama_kegiatan, bidang_fokus)
VALUES (:id_pengguna, :judulpro, :abstrak, :keywords, :lamakegiatan, :bidangfokus)");
$query->bindParam(':id_pengguna', $pengguna, PDO::PARAM_STR);
$query->bindParam(':judulpro', $judul_pro, PDO::PARAM_STR);
$query->bindParam(':abstrak', $abstrak, PDO::PARAM_STR);
$query->bindParam(':keywords', $keywords, PDO::PARAM_STR);
$query->bindParam(':lamakegiatan', $lama_kegiatan, PDO::PARAM_STR);
$query->bindParam(':bidangfokus', $bidang_fokus_id, PDO::PARAM_STR);
$query->execute();
$lastInsertID = $this->conn->lastInsertId();
$query = $this->conn->prepare("INSERT INTO atribut_proposal
(id_pengguna, bidang_fokusatribut, topik_penelitian)
VALUES (:id_pengguna, :bidangfokusatribut, :topikpenelitian)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':bidangfokusatribut', $bidang_fokus_at, PDO::PARAM_STR);
$query->bindParam(':topikpenelitian', $topik_penelitian, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO daftar_personil
(id_pengguna, nidn, nama_personil, program_studi, jenjang_pend, jabatan)
VALUES (:id_pengguna, :nidn, :namapersonil, :programstudi, :jenjangpendidikan, :jabatan)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':nidn', $nidn, PDO::PARAM_STR);
$query->bindParam(':namapersonil', $nama_personil, PDO::PARAM_STR);
$query->bindParam(':programstudi', $prodi, PDO::PARAM_STR);
$query->bindParam(':jenjangpendidikan', $jen_pend, PDO::PARAM_STR);
$query->bindParam(':jabatan', $jab_fung, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO biaya_usulan
(id_pengguna, biaya_tahun1, biaya_tahun2, biaya_tahun3)
VALUES (:id_pengguna, :biayatahun1, :biayatahun2, biayatahun3)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':biayatahun1', $danus1, PDO::PARAM_STR);
$query->bindParam(':biayatahun2', $danus2, PDO::PARAM_STR);
$query->bindParam(':biayatahun3', $danus3, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO biaya_internal
(id_pengguna, biaya_tahun1in, biaya_tahun2in, biaya_tahun3in)
VALUES (:id_pengguna, :biayatahun1in, :biayatahun2in, biayatahun3in)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':biayatahun1in', $danin1, PDO::PARAM_STR);
$query->bindParam(':biayatahun2in', $danin2, PDO::PARAM_STR);
$query->bindParam(':biayatahun3in', $danin3, PDO::PARAM_STR);
$query->execute();
$this->conn->commit();
}
catch (PDOException $e){
$this->conn->rollBack();
echo $e->getMessage();
var_dump($this->conn->errorInfo());
}
return true;
}
}
<?php
require_once __DIR__ . "/../class.proposal.php";
$proposal = new PROPOSAL();
if (isset($_POST['submit'])){
$pengguna = $_SESSION['userSession'];
$judulpro = $_POST['judulproposal'];
$abstrak = $_POST['abstrak'];
$keywords = $_POST['keywords'];
$lama_kegiatan = $_POST['lamakegiatan'];
$bidang_fokus_id = $_POST['bidangfokusid'];
$bidang_fokus_at = $_POST['bidangfokusat'];
$topik_penelitian = $_POST['topik'];
$nidn = $_POST['nidn'];
$nama_personil = $_POST['namapersonil'];
$program_studi = $_POST['programstudi'];
$jenjang_pendidikan = $_POST['jenjangpendidikan'];
$jabatan = $_POST['jabatan'];
$biaya_tahun1us = $_POST['danus1'];
$biaya_tahun2us = $_POST['danus2'];
$biaya_tahun3us = $_POST['danus3'];
$biaya_tahun1in = $_POST['danin1'];
$biaya_tahun2in = $_POST['danin2'];
$biaya_tahun3in = $_POST['danin3'];
try {
if($proposal->pengajuan_proposal($pengguna, $judulpro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at,
$topik_penelitian, $nidn, $nama_personil, $program_studi, $jenjang_pendidikan,
$jabatan, $biaya_tahun1us, $biaya_tahun2us, $biaya_tahun3us, $biaya_tahun1in,
$biaya_tahun2in, $biaya_tahun3in)){
}
}
catch (PDOException $e){
echo $e->getMessage();
}
}
?>
然后,在pengajuan.php文件上,我编写了如下代码:
public function pengajuan_proposal($pengguna, $judul_pro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at, $topik_penelitian,
$nidn, $nama_personil, $prodi, $jen_pend, $jab_fung, $danus1, $danus2, $danus3, $danin1, $danin2,
$danin3){
$this->conn->beginTransaction();
try {
$query = $this->conn->prepare("INSERT INTO identitas_proposal
(id_pengguna, judul_pro, abstrak, keywords, lama_kegiatan, bidang_fokus)
VALUES (:id_pengguna, :judulpro, :abstrak, :keywords, :lamakegiatan, :bidangfokus)");
$query->bindParam(':id_pengguna', $pengguna, PDO::PARAM_STR);
$query->bindParam(':judulpro', $judul_pro, PDO::PARAM_STR);
$query->bindParam(':abstrak', $abstrak, PDO::PARAM_STR);
$query->bindParam(':keywords', $keywords, PDO::PARAM_STR);
$query->bindParam(':lamakegiatan', $lama_kegiatan, PDO::PARAM_STR);
$query->bindParam(':bidangfokus', $bidang_fokus_id, PDO::PARAM_STR);
$query->execute();
$lastInsertID = $this->conn->lastInsertId();
$query = $this->conn->prepare("INSERT INTO atribut_proposal
(id_pengguna, bidang_fokusatribut, topik_penelitian)
VALUES (:id_pengguna, :bidangfokusatribut, :topikpenelitian)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':bidangfokusatribut', $bidang_fokus_at, PDO::PARAM_STR);
$query->bindParam(':topikpenelitian', $topik_penelitian, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO daftar_personil
(id_pengguna, nidn, nama_personil, program_studi, jenjang_pend, jabatan)
VALUES (:id_pengguna, :nidn, :namapersonil, :programstudi, :jenjangpendidikan, :jabatan)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':nidn', $nidn, PDO::PARAM_STR);
$query->bindParam(':namapersonil', $nama_personil, PDO::PARAM_STR);
$query->bindParam(':programstudi', $prodi, PDO::PARAM_STR);
$query->bindParam(':jenjangpendidikan', $jen_pend, PDO::PARAM_STR);
$query->bindParam(':jabatan', $jab_fung, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO biaya_usulan
(id_pengguna, biaya_tahun1, biaya_tahun2, biaya_tahun3)
VALUES (:id_pengguna, :biayatahun1, :biayatahun2, biayatahun3)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':biayatahun1', $danus1, PDO::PARAM_STR);
$query->bindParam(':biayatahun2', $danus2, PDO::PARAM_STR);
$query->bindParam(':biayatahun3', $danus3, PDO::PARAM_STR);
$query->execute();
$query = $this->conn->prepare("INSERT INTO biaya_internal
(id_pengguna, biaya_tahun1in, biaya_tahun2in, biaya_tahun3in)
VALUES (:id_pengguna, :biayatahun1in, :biayatahun2in, biayatahun3in)");
$query->bindParam(':id_pengguna', $lastInsertID, PDO::PARAM_STR);
$query->bindParam(':biayatahun1in', $danin1, PDO::PARAM_STR);
$query->bindParam(':biayatahun2in', $danin2, PDO::PARAM_STR);
$query->bindParam(':biayatahun3in', $danin3, PDO::PARAM_STR);
$query->execute();
$this->conn->commit();
}
catch (PDOException $e){
$this->conn->rollBack();
echo $e->getMessage();
var_dump($this->conn->errorInfo());
}
return true;
}
}
<?php
require_once __DIR__ . "/../class.proposal.php";
$proposal = new PROPOSAL();
if (isset($_POST['submit'])){
$pengguna = $_SESSION['userSession'];
$judulpro = $_POST['judulproposal'];
$abstrak = $_POST['abstrak'];
$keywords = $_POST['keywords'];
$lama_kegiatan = $_POST['lamakegiatan'];
$bidang_fokus_id = $_POST['bidangfokusid'];
$bidang_fokus_at = $_POST['bidangfokusat'];
$topik_penelitian = $_POST['topik'];
$nidn = $_POST['nidn'];
$nama_personil = $_POST['namapersonil'];
$program_studi = $_POST['programstudi'];
$jenjang_pendidikan = $_POST['jenjangpendidikan'];
$jabatan = $_POST['jabatan'];
$biaya_tahun1us = $_POST['danus1'];
$biaya_tahun2us = $_POST['danus2'];
$biaya_tahun3us = $_POST['danus3'];
$biaya_tahun1in = $_POST['danin1'];
$biaya_tahun2in = $_POST['danin2'];
$biaya_tahun3in = $_POST['danin3'];
try {
if($proposal->pengajuan_proposal($pengguna, $judulpro, $abstrak, $keywords, $lama_kegiatan, $bidang_fokus_id, $bidang_fokus_at,
$topik_penelitian, $nidn, $nama_personil, $program_studi, $jenjang_pendidikan,
$jabatan, $biaya_tahun1us, $biaya_tahun2us, $biaya_tahun3us, $biaya_tahun1in,
$biaya_tahun2in, $biaya_tahun3in)){
}
}
catch (PDOException $e){
echo $e->getMessage();
}
}
?>
我试图在这里找到解决方案,并实现了类似于删除父表(在我的例子中是用户)的方法,然后再次创建该表,或者将默认字段id_pengguna更改为null,但没有成功。有什么问题吗?或者我的代码仍然有错误或者其他什么。顺便说一句,对不起,我的英语不好 @VTaehyung,由于外键约束,您面临问题。 “删除外键约束”或确保id_pengguna列值应出现在id列的用户表中 我们不能在外部表中添加值,除非它出现在主表中。 例如,我们无法在尚未存在的部门中添加员工 例如,Sales.SalesOrderHeader表具有指向Sales.SalesPerson表的外键链接,因为销售订单和销售人员之间存在逻辑关系。SalesOrderHeader表中的SalesPersonID列与SalesPerson表的主键列匹配。SalesOrderHeader表中的SalesPersonID列是SalesPerson表的外键。通过创建此外键关系,如果SalesOrderHeader表中不存在SalesPersonID的值,则无法将其插入SalesOrderHeader表中 参考资料:
好的,谢谢你的解释。实际上,我在用户表的id字段(pk)中有值,当我在pengajuan.php上回显它时,它有值,值是1。正如您所说,“我们不能在外部表中添加值,除非它出现在主表中”,但我的主表已经有了值。我想知道发生了什么事?您可以从我的代码中看到,我将id_pengguna设置为$_SESSION['userSession'],因此我根据谁是loggedin插入id_pengguna。我认为,外键约束在表atribut_建议上失败,其中id_pengguna值等于identitas_建议中最后插入的id。您可以更改bindParam(':id_pengguna',$lastInsertID,PDO::PARAM_STR);>>到$query->bindParam(':id_pengguna',$pengguna,PDO::PARAM_STR);谢谢你的建议,它奏效了。lastinsertID()函数不能用于此情况。可能会重复关闭