首页 > 解决方案 > 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'

标签: phpmysql

解决方案


为了避免直接在 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。工作示例可以在这里找到。干杯!


推荐阅读