php - 如何在一个查询中执行插入?
问题描述
框架:本地主机上的 MySQL 服务器使用 XAMPP 服务器。
我正在尝试将所有这些字段插入特定表“tbl_labelled_images”中:
- id_in_raw_image_table
- 图片
- 标签
- 性别
其中,图像来自另一个名为“tbl_raw_image”的表,id_in_raw_image_table 是该图像在表“tbl_raw_image”中的 id。
然后标签和性别是用户在运行时使用单选按钮进行的输入。但问题是我无法在单个查询中插入所有这四个属性。如果所有这些都在同一个查询中,则查询不会在表中插入任何内容。我尝试了以下查询,但没有一个真正有帮助:
$label=mysqli_real_escape_string($conn, $_POST["radio"]);
$gender=mysqli_real_escape_string($conn,$_POST["radio-gender"]);
$query_insert="INSERT INTO labelled_images.tbl_labelled_image
(`label`,`gender`,`image`, `id_in_raw_image_table`) '$label','$gender',
SELECT image, id FROM raw_images.tbl_raw_image
WHERE raw_images.tbl_raw_image.id = $id_raw";
$insert_exec = mysqli_query($conn, $query_insert);
和
$sql = "SELECT * FROM tbl_raw_image WHERE id IN
(SELECT id FROM (SELECT id FROM tbl_raw_image ORDER BY RAND() LIMIT 1) t)";
$sth = $conn1->query($sql);
$result=mysqli_fetch_array($sth);
$id=$result['id'];
$image=$result['image'];
$label=mysqli_real_escape_string($conn, $_POST["radio"]);
$gender=mysqli_real_escape_string($conn,$_POST["radio-gender"]);
$query2="INSERT INTO tbl_labelled_image(image, label, id_in_raw_image_table) VALUES('$image','$label','$id'); ";
$rs = mysqli_query($conn2, $query2);
但他们都没有为我工作。作为一种解决方法,我目前正在使用复杂的两步插入,如下所示:
$sql = "SELECT * FROM tbl_raw_image WHERE id IN
(SELECT id FROM (SELECT id FROM tbl_raw_image ORDER BY RAND() LIMIT 1) t)";
$sth = $conn1->query($sql);
$result=mysqli_fetch_array($sth);
$id=$result['id'];
$image=$result['image'];
$label=mysqli_real_escape_string($conn, $_POST["radio"]);
$gender=mysqli_real_escape_string($conn,$_POST["radio-gender"]);
$query_insert="INSERT INTO labelled_images.tbl_labelled_image
(`image`, `id_in_raw_image_table`)
SELECT image, id FROM raw_images.tbl_raw_image
WHERE raw_images.tbl_raw_image.id = $id_raw;";
$insert_exec = mysqli_query($conn, $query_insert);
$labelled_id=mysqli_insert_id($conn);
$query_label = "UPDATE labelled_images.tbl_labelled_image SET
`label` = '$label', `gender` = '$gender' WHERE `id`=$labelled_id";
$label_insert_exec = mysqli_query($conn, $query_label);
$query_update_Is_labelled="UPDATE raw_images.tbl_raw_image SET `Is_labelled`= 1 WHERE id= $id_raw; ";
$update=mysqli_query($conn,$query_update_Is_labelled);
它有效,但远非理想。所以我的问题是,有没有办法一步完成这个插入?或者更一般地说,当要插入的不同记录字段来自不同来源时应该怎么做?
解决方案
您可以尝试在 MySQL 选择查询中使用静态值SELECT '$label' as label,'$gender' as gender
完整查询:
$query_insert="INSERT INTO labelled_images.tbl_labelled_image
(`label`,`gender`,`image`, `id_in_raw_image_table`)
SELECT '$label' as label,'$gender' as gender, image, id FROM raw_images.tbl_raw_image
WHERE raw_images.tbl_raw_image.id = $id_raw
";
编辑:在SELECT之前删除VALUES()
推荐阅读
- typescript - 元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引
- javascript - 如何通过搜索栏 React Native 搜索 FlatList?
- html - CSS网格中列的反转顺序
- c - 带有 Zip 插件的 Cordova iOS 应用程序编译 - 未找到 aes/aes.h
- javascript - 如果 JavaScript 中有条件,如何使用 forEach 循环返回 true
- python - 在 python 中运行函数后,切片对象作为参数没有改变
- laravel - 使用带有 Laravel eloquent 和多个 where 子句的 Haversine 公式
- reactjs - 从json在html页面中实现react路由
- r - 根据日期修改部分数据框
- node.js - 如何将本地 node_modules 安装到全局并通过环境变量使用 cli 访问它