【发布时间】:2019-12-08 10:47:56
【问题描述】:
我有 2 张桌子。第一个表是tbl_items,第二个表是tbl_items_extras。
我将我的项目插入tbl_items,如果这个项目有一个/多个附加项,它们将被插入到tbl_items_extras 表中tbl_items.id=tbl_items_extras.tbl_items_id。
我能够使用以下查询完美地复制 tbl_items 的记录;
INSERT INTO `tbl_items` (`items_ref_id`, `rev`, `die_number`, `product_type_id`, `parts_id`, `complexity_id`)
SELECT
q.`items_ref_id`,
q.`rev`+1,
q.`die_number`,
q.`product_type_id`,
q.`parts_id`,
q.`complexity_id`
FROM `tbl_items` q WHERE `items_ref_id`='$refNum' AND `rev`='$maxRev'
但是当我使用以下查询复制 tbl_items_extras 记录时;
INSERT INTO `tbl_items_extras` (`tbl_items_id`, `extras_conditions_id`, `percentage`, `quantity`, `total_percentage`)
SELECT
q.`tbl_items_id`,
q.`extras_conditions_id`,
q.`percentage`,
q.`quantity`,
q.`total_percentage`
FROM `tbl_items_extras` q WHERE `tbl_items_id` IN (SELECT `id` FROM `tbl_items` WHERE `items_ref_id`='$refNum' AND `rev`='$rev')
在这个查询中,我没有得到我真正需要的东西。请参阅下面的屏幕截图。
我需要复制tbl_items_extras 中的选定记录,其中tbl_items_id 必须是tbl_items 中重复记录的SQL_INSERTED_ID。
如您所见,tbl_items.id 在tbl_items_extras.tbl_items_id 中被相应地使用。
我知道我可以使用LAST_INSERT_ID,但这仅适用于单个记录。
【问题讨论】:
-
您应该使用参数而不是直接将 PHP 变量放入查询中。
-
@Dharman,谢谢。但是参数是什么意思?
-
您应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 或MySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
quote_ref_id?嗯?
-
@Dharman,我已经在使用这些了 -
$refNum = mysqli_real_escape_string($connect, $_POST['refNum']); $rev = mysqli_real_escape_string($connect, $_POST['rev']);
标签: mysql duplicates last-insert-id