繁体   English   中英

MySQL 如何在 INSERT INTO SELECT 查询中使用动态 PHP 变量?

[英]MySQL How to use dynamic PHP variables inside INSERT INTO SELECT query?

假设我有一个生成唯一机器人名称的 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 ,它使用第二个定义的查询插入旧数据,同时仍然添加机器人名称。 千万记住$pdo被定义为PDO对象,你需要在你的PHP PDO支持安装。 可以在此处找到工作示例。 干杯!

您可以将任务分为两部分:

  • 从 MySQl 获取数据

  • 插入由 PHP 更新的新数据

    $sql = "SELECT origin, name, color, position, controller FROM robots WHERE controller = 'remote'"; $stmt= $pdo->prepare("insert into robots (origin, name, color, position, controller) values (?, ?, ?, ?, ?);"); foreach ($pdo->query($sql) as $row) { $stmt->execute([ $row['origin'], generateRobotName(), $row['color'], $row['position'], $row['controller'] ]); }

这里是实时代码PHPize.online

另一个带有命名参数的例子:

$sql = "SELECT origin, name, color, position, controller
        FROM robots WHERE controller = 'remote'";

$stmt= $pdo->prepare(
    "insert into robots (origin, name, color, position, controller) 
        values (:origin, :name, :color, :position, :controller);"
);

foreach ($pdo->query($sql, PDO::FETCH_ASSOC) as $row) {
    $row['name'] = generateRobotName();
    $stmt->execute($row);
}

PHPize 在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM