【发布时间】:2014-11-05 02:09:38
【问题描述】:
我正在创建一个使用 Apache Web 服务器 (PHPmyAdmin) 的 PHP 网站
我有 3 张桌子:
- 品牌
- brand_id(主键)自动增量
- 品牌名称
- 项目
- item_id(主键)自动递增
- item_category
- 型号
- 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 注入
-
请查看我的最新帖子。我提供了新信息