【问题标题】:Referential Integrity Error参照完整性错误
【发布时间】:2016-03-13 22:29:48
【问题描述】:

我在数据库期末考试项目中遇到了一些参考完整性错误问题。我试图自己弄清楚,但无济于事,我希望这里有人能指出我正确的方向。

问题是我有三个表,前两个是第三个表的父表。我正在尝试构建一个 php 脚本来更新两个父表,然后将数据插入到子表中。到目前为止,我认为它会起作用,但是每当我尝试使用它时,都会收到以下错误:

插入购买(CustomerID、PurchaseOrderNo、PurchaseTotal、DateOfPurchase、SalesPersonID、SpecialOrder)值('10'、'0000'、'100.00'、'0000-00-00'、'5555'、'N')

无法添加或更新子行:外键约束失败 ('xxxxxx'.'Purchases', CONSTRAINT 'Purchases_ibfk_1' FOREIGN KEY ('CustomerID') REFERENCES 'CustomerInfo'('CustomerID') ON DELETE CASCADE ON UPDATE级联)'

有什么想法我哪里出错了吗?

        ########## FOREIGN KEY CHECK START ##########
$sql = "select count(*) as count from CustomerInfo where '$customerid' = CustomerID";
$result = mysqli_query($con,$sql)
or  die('Error: ' . mysql_error());

$row = mysqli_fetch_assoc($result);
    if ( $row['count']==0 ){
    "INSERT INTO CustomerInfo ('CustomerID') VALUES ('$customerid');";
    echo "<p>Customer ID Not Found. <br />New CustomerID Created.</p>";
   }

$sql2 = "select count(*) as count from EmployeeInfo where '$salespersonid' =  SalesPersonID;";
$result2 = mysqli_query($con,$sql)
 or  die('Error: ' . mysql_error());
 $row2 = mysqli_fetch_assoc($result2);

if ( $row2['count']==0 ){
"INSERT INTO EmployeeInfo ('SalesPersonID')VALUES ('$salespersonid');";
echo "<p>Salesperson ID Not Found. <br />New Salesperson ID Created.</p>";
}

    ########## FOREIGN KEY CHECK END ##########

    ########## DATA ENTRY SQL STATEMENT START ##########
$sql3 = "INSERT INTO Purchases (CustomerID, 
          PurchaseOrderNo, 
          PurchaseTotal, 
          DateOfPurchase, 
          SalesPersonID,
          SpecialOrder) 
VALUES ('$customerid',   
        '$purchaseorderno',
        '$purchasetotal',
        '$dateofpurchase',
        '$salespersonid',
        '$specialorder')";
    ########### DATA ENTRY SQL STATEMENT END ##########

    ########## INPUT SUCCESS/FAILURE REPORTING#########
if (mysqli_query($con, $sql3)) {
    echo "<P>Record Successfully Created</P><BR />";
} else {
  echo "Error: " . $sql9. "<br>" . mysqli_error($con);
}
mysqli_close($con);
echo "<P>Connection Successfully Closed.</P>";

【问题讨论】:

  • MySQL 的确切错误是什么?我从未听说过“参照完整性错误”...
  • 它告诉您您尝试插入的 CustomerID 在 CustomerInfo 表中不存在
  • 如果我们看到表定义可能会有所帮助。
  • 看起来您实际上并没有为客户信息运行插入查询...或员工信息

标签: php mysql


【解决方案1】:

您没有执行 CustomerInfoEmployeeInfo

的插入查询
    $sql = "select count(*) as count from CustomerInfo where '$customerid' = CustomerID";
    $result = mysqli_query($con,$sql)
    or  die('Error: ' . mysql_error());

    $row = mysqli_fetch_assoc($result);
        if ( $row['count']==0 ){

    ###THE NEXT LINE DOESN'T DO ANYTHING###
        "INSERT INTO CustomerInfo ('CustomerID') VALUES ('$customerid');";
        echo "<p>Customer ID Not Found. <br />New CustomerID Created.</p>";
       }

此外,您不希望在插入语句中的列名周围加上单引号,而不是:

INSERT INTO CustomerInfo ('CustomerID') VALUES ('$customerid')

你想要的:

INSERT INTO CustomerInfo (CustomerID) VALUES ('$customerid')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2010-09-26
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多