我有这个mysql查询(在提交时将表单中的值添加到表中)。它返回一条错误消息:
$query = "INSERT INTO customers(customerNumber, customerName, contactLastName, contactFirstName, phone, addressLine1, addressLine2, city, state, postalCode, country, salesRepEmployeeNumber, creditLimit) VALUES ('$customer_number', '$customer_name', '$last_name', '$first_name', '$phone_number', '$address_1', '$address_2', '$city', '$state', '$postal_code', '$country', '$sales_number', '$credit_limit')";
$result = mysqli_query($dbc, $query)
or die(mysqli_error($dbc));
错误消息:
Cannot add or update a child row: a foreign key constraint fails
(ikb2014_employees
。customers
,CONSTRAINT customers_ibfk_1
外键(salesRepEmployeeNumber
)参考employees
(employeeNumber
))
我很难解读“外键约束”所在的位置。失败。如何将特定表的数据库中的选项更改为我能够运行查询?
phpMyAdmin中的选项显示表employees
和列employeeNumber
(假设是导致错误的位置)。
# Name Type Collation Attributes Null Default Extra Action
1 employeeNumber int(11) No None AUTO_INCREMENT
之前我没有使用过数据库,因此我很难理解问题发生的位置和原因。任何关于如何修复约束以正确运行查询的输入将不胜感激。
答案 0 :(得分:1)
外键constaint失败意味着您尝试将数据输入到另一个表中不存在的一个表的列中。外键约束用于确保插入子表的数据存在于父表中。
在您的情况下,您尝试将数据插入(或不尝试插入)到customers表的salesRepEmployeeNumber列。为了成功执行此操作,您需要确保为employeesRepEmployeeNumber提供的值存在于employees表的employeeNumber列中。
答案 1 :(得分:0)
外键约束错误反对分配给salesRepEmployeeNumber
列的值。外键约束是检查为该列提供的值是否匹配 employees
表中的行,它正在寻找具有employeeNumber
相同值的行,而且它找不到一个。
如果您不希望数据库强制执行外键约束,则不要定义一个。
如果您确实需要约束,则说明您必须为employeeNumber
提供有效的NULL
或salesRepEmployeeNumber
值。
从我们看到的代码来看,SQL语句似乎容易受到SQL注入攻击。 (我们没有看到对包含在SQL文本中的变量值的任何保证。如果这些值中的任何一个可能不安全,那么这些值需要正确转义,例如,使用mysqli_real_escape_string
功能
更好的模式是使用准备好的声明和绑定占位符。
答案 2 :(得分:0)
如果您的外键错误,您可以在phpMyAdmin中轻松删除它。 转到客户表,点击'结构'选项卡,在底部将有一个+索引隐藏列表,展开它并在所选索引上单击DROP。