使用准备好的语句插入多行

dzjeubhm  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(396)

我正在尝试使用prepared语句查询向表中插入多行。我需要从第二个表中检索2个值,并将它们与3个参数一起插入。
mysql只将子查询看作一个值,而不是检索到的2,因此请求添加另一个参数,因为只有4个参数存在。

$stmt = $mysqli->prepare("INSERT INTO tbl_permit_daily_sign_off (permit_id, shift, employee_id, sign_off_date, type)
                              VALUES ((SELECT tbl_permit_project.permit_id, tbl_shifts.shift_name FROM tbl_permit_project
                              INNER JOIN tbl_shifts ON tbl_permit_project.project_id = tbl_shifts.project_id
                            WHERE tbl_shifts.end_time <= NOW()), ?, ?, ?)");
$stmt->bind_param("iss",  $permit_employee = 0, $today, $type = "auto");
$stmt->execute();
$stmt->close();
6tqwzwtp

6tqwzwtp1#

你需要 INSERT ... SELECT 插入形式,而不是 INSERT ... VALUES() 形式。

INSERT INTO tbl_permit_daily_sign_off 
            (permit_id, shift, employee_id, sign_off_date, type)
     SELECT tbl_permit_project.permit_id, tbl_shifts.shift_name  
      FROM tbl_permit_project
INNER JOIN tbl_shifts ON tbl_permit_project.project_id = tbl_shifts.project_id
     WHERE tbl_shifts.end_time <= NOW()), ?, ?, ?)

这是怎么回事?
1) 您可以设计一个select查询,给出要在insert查询中使用的列。然后测试并排除故障。
2) 你把 INSERT INTO tbl (col, col, col...) 就在你选择之前。
插入选择列 (permit_id, shift, employee_id, sign_off_date, type) 但是你的选择只提到其中的两列。你需要选择提到所有五个。

相关问题