【问题标题】:Insert row into a table with foreign key inside PHP在PHP中使用外键将行插入表中
【发布时间】:2014-11-05 02:09:38
【问题描述】:

我正在创建一个使用 Apache Web 服务器 (PHPmyAdmin) 的 PHP 网站

我有 3 张桌子:

  1. 品牌
    • brand_id(主键)自动增量
    • 品牌名称
  2. 项目
    • item_id(主键)自动递增
    • item_category
  3. 型号
    • model_id(主键)自动递增
    • item_model
    • brand_id(brand.brand_id 的外键)
    • brand_name(item.item_id 的外键)
    • 数量
    • 价格

我想在模型表中插入新值时遇到问题。

这是我用于插入的 PHP 代码

if (isset($_POST['brand_id']));
    $brand = ($_POST['brand_id']);
if (isset($_POST['item_id']));
    $cat = ($_POST['item_id']);
if (isset($_POST['model']));
    $model = ($_POST['model']);
if (isset($_POST['quantity']))
    $quantity = ($_POST['quantity']);
if (isset($_POST['price']))
    $price = ($_POST['price']);

        $sql = "INSERT INTO model (item_model, brand_id, item_id, quantity, price)
                VALUES ('$model', '$brand', '$cat', '$quantity', '$price')";

请注意,我没有在 model_id 中插入任何值,因为我认为它会自动增加,因为它是自动增量。我不知道我是对还是错。 isset 值是从另一个 PHP 文件传递​​的。所以这个 PHP 基本上只是从以前的 PHP 文件中捕获抛出的值。

我曾尝试使用 SQL 语句直接从 PHPmyAdmin 插入值,结果出现此错误:

Cannot add or update a child row: a foreign key 
constraint fails (`stock`.`model`, CONSTRAINT `fk_item_brand` 
FOREIGN KEY (`brand_id`) REFERENCES `brand` (`brand_id`) ON UPDATE CASCADE) 

如果我尝试将 id 值放入其中一列,则会产生错误:

SQL query:

INSERT INTO `model`(`model_id`, `item_model`, `brand_id`, `item_id`, `quantity`, `price`) 
VALUES (1,'a','1','1','a','a')

MySQL said: Documentation

#1062 - Duplicate entry '1' for key 'PRIMARY' 

如何在 PHP 中使用外键向表中插入一行?

【问题讨论】:

  • "我有问题" -- 有什么问题?您正在正确地进行自动增量。
  • 你是对的,你不需要包含自动增量值。我真正不喜欢的是如何将 URL 参数直接插入到 SQL 命令中。永远不要这样做。在此处阅读有关 SQL 注入的更多信息:stackoverflow.com/questions/60174/…
  • if 语句的末尾有一些额外的分号。他们可能是问题所在。或者,如果由于未设置相应的 $_POST 变量而未实例化您的变量之一,则它可能会失败。在任何情况下,我都会检查通过POST(例如类型和/或长度)传递到此页面的内容,也许使用filter_var(),并且我会使用准备好的语句并将值绑定到语句。跨度>
  • 顺便说一句,如果您正在执行该查询......那么无论您使用什么查询,您的代码都可以进行 sql 注入
  • 请查看我的最新帖子。我提供了新信息

标签: php mysql sql


【解决方案1】:
$sql = "INSERT INTO model (model_id,item_model, brand_id, item_id, quantity, price)
                VALUES (null,'$model', '$brand', '$cat', '$quantity', '$price')";

试试这个。

添加自增字段并传值null

【讨论】:

  • 省略列与插入NULL 相同。
  • 你的查询和有问题的查询有什么区别?
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多