php - MySQL 如何在 INSERT INTO SELECT 查询中使用动态 PHP 变量?
问题描述
假设我有一个生成唯一机器人名称的 PHP 函数,例如:
$rname = generateRobotName();
我想用远程控制器复制所有机器人,并为每个新机器人分配一个唯一的机器人名称(由上述函数生成)。
我该怎么做?
INSERT INTO robots values (origin, name, color, position, controller)
SELECT origin, '".$rname."', color, position, controller
FROM robots
WHERE controller = 'remote'
解决方案
为了避免直接在 SQL 语句中集成变量带来的 SQL 注入和其他漏洞(在这种情况下不是一个大问题,但这是一个很好的做法),您可以将 PDO 与准备好的语句一起使用。以下代码循环遍历每个 MySQL 查询的每个步骤并更新机器人名称:
$SQLInsert = "INSERT INTO robots (origin, name, color, position, controller) values (:origin, :name, :color, :position, :controller)";
$SQLSelect = "SELECT origin, name, color, position, controller FROM robots WHERE controller = 'remote'";
foreach ($pdo->query($SQLSelect) as $row){
$params = [
':origin' => $row['origin'],
':name' => generateRobotName(),
':color' => $row['color'],
':position' => $row['position'],
':controller' => $row['controller']
];
$SQLInsert = $pdo->prepare($SQLInsert);
$SQLInsert->execute($params);
}
上面的代码执行 SQL Select 查询,对于它找到的每一行$row
,它使用第二个定义的查询插入旧数据,同时仍然添加机器人名称。DO请记住$pdo
被定义为 PDO 对象,您需要在 PHP 安装中支持 PDO。工作示例可以在这里找到。干杯!
推荐阅读
- azure - 有没有办法知道文件是否已上传到 Azure 中的网络驱动器
- c++ - c ++包含标头失败
- c++ - Char 表示来自 int 的十六进制数,前缀为 '0x0'
- c# - ArgumentNullException:值不能为空,但它不是
- java - 如何在 Java 中使用 androidx.lifecycle.ViewModelProvider
- java - 使用占位符 jpa 命名查询将列名作为参数传递,返回不正确的数据
- winforms - 在 Winforms ReportViewer 中为当前页码添加偏移量
- vue.js - 更改 Axios 默认参数在 Vuex 操作事件上未更改
- node.js - 如何在 Heroku 上设置环境变量?
- html - 突出显示垫行单元格的全宽