php - 您可以在两个表之间执行“INSERT SELECT WHERE”吗?
问题描述
所以我一直在尝试创建一个简单的朋友系统。当你注册时,你会得到随机数字和 8 个长度的字符。我将此数字保存在用户的列中。我一直在尝试使用“INSERT SELECT WHERE”语句插入当前会话用户(PHP)$SessionUser
以及朋友的用户名,但出现了问题。uidUsers
这是我尝试过的东西:
$sql = mysqli_query($conn, "INSERT into friends (uid1, uid2)
values($sessionUser, (SELECT uidUsers FROM users WHERE idFriendCode = $idFriendCode)");
在表中friends
,我有两列,uid1
(会话用户/发送者)和uid2
(接收者,指定的名称$idFriendCode
)。我想将 插入$sessionUser
uid1 以及与 匹配的任何用户名(uidUsers
)。这似乎不起作用,我不知道为什么。我想问题是我不能使用这样的 PHP 变量。$idFriendCode
uid2
我知道我不使用准备好的语句。我已经尝试实现它,但我认为它比仅使用基本的 mysqli_query() 要困难得多。
解决方案
您可以将插入内容表述为INSERT INTO ... SELECT
:
INSERT into friends (uid1, uid2)
SELECT $sessionUser, uidUsers
FROM users
WHERE idFriendCode = $idFriendCode;
请注意,理想情况下,您应该在这里使用准备好的语句,因此上面的内容应如下所示:
INSERT into friends (uid1, uid2)
SELECT ?, uidUsers
FROM users
WHERE idFriendCode = ?;
推荐阅读
- sql - 将以下“RIGHT OUTER JOIN”查询修改或提高效率进入内连接?
- c# - 保存布局到流。错误:找不到部分路径“c:\TreeListLayout\”
- java - 如何动态更改bottomAppBar菜单图标
- xaml - 如何在 xamarin 表单中自动大写键盘/输入
- java - 如何保持硒步保持等待1小时?
- android - 如何限制对cordova android内部存储中的应用程序文件的访问?
- laravel - 无法打开流:没有这样的文件或目录(Laravel)
- reactjs - 使用功能组件时使用大括号与圆括号制作组件
- javascript - 使用在单个表单中发布不同的数据
- docker - dotnet restore 在 1 wifi 上的 docker 中失败,其他还好