使用PHP的外键插入mysql表

时间:2015-11-30 13:59:07

标签: php mysqli

嗨,我有两张桌子,

users_table和orders表。

users_id在两个表中

作为users_table中的主键和orders_table中的外键(引用users_table中的users_id)

当我尝试下订单时,如果用户第一次能够下订单但是如果用户已下订单,则数据在第二次尝试时不会保存到数据库中..想法为什么?或任何解决方案?

我为糟糕的英语道歉

我的PHP代码:

$query = "INSERT INTO orders_table(users_id, orders_postDate, orders_category, orders_categoryId, orders_name, orders_description, orders_deliveryDate) VALUES('$users_id', '$orders_postDate', '$orders_category', '$orders_categoryId', '$orders_name', '$orders_description', '$orders_deliveryDate')";

    $result = mysqli_query($connection, $query);

    if($result){
        echo "SUCCESS";
    }else{
        echo "fail";
    }

所以,让我们说我创建了一个帐户,登录并下了订单,数据在数据库上成功。如果我尝试向同一个用户下新订单,我会收到失败消息..所以出于某种原因

mysqli_query($connection, $query);

第二次失败,我假设这是因为我的外键是主键?我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

是的,你是对的,如果orders_table.user_id使用主键,那么还有一个' unique'键。如果是这样,MySql不允许粘贴相同的user_id

使用ALTER TABLE sql命令删除orders_table.user_id上的主键添加添加主键的新列。

您需要以下代码:

ALTER TABLE orders_table DROP PRIMARY KEY;
ALTER TABLE orders_table ADD COLUMN `id` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE orders_table ADD PRIMARY KEY(`id`);

答案 1 :(得分:0)

没有代码/错误消息,很难说出问题所在。但是,您提到user_idorders_table的外键,但如果它也用于orders_table的主键,则在创建任何后续订单时会导致重复,因此,插入新订单将失败。

这些可能有助于您帮助我们更好地了解最新情况。

  • 您的orders_table是如何创建的?
  • Orders_table的主键是什么?
  • 如何在插入新记录时分配主键(如果这样做?)
  • 由于您可以插入第一条记录,表示您获得了成功的连接。因此,不要回显“成功”和“失败”,而是提取mysqli error而不是。

此外,由于您正在处理MySQL和PHP,因此您可能需要考虑使用PDO对象,如果您还没有。能够使用准备好的陈述是一个巨大的优势。

答案 2 :(得分:0)

您的插入查询未从users_table获取数据,因此将无法将正确的用户数据插入Orders_table;第二,创建具有用户ID作为主键和外键的order_table,外键将导致数据重复。尝试更改表以删除主表并为其创建另一列(主键)。

一个例子

ALTER TABLE orders_table DROP PRIMARY KEY;
ALTER TABLE orders_table ADD COLUMN 'id' int NOT NULL AUTO_INCREMENT PRIMARY KEY;

这应该使您的代码现在可以正常工作。