简体   繁体   English

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

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

Say I have a PHP function that generates a unique robot name, eg:假设我有一个生成唯一机器人名称的 PHP 函数,例如:

$rname = generateRobotName();   

I would like to duplicate all the robots with REMOTE controller AND assign a unique Robot Name to each new one (generated by the above function).我想用遥控器复制所有机器人,并为每个新机器人分配一个唯一的机器人名称(由上述功能生成)。

How do I go about that?我该怎么做?

INSERT INTO robots values (origin, name, color, position, controller)
SELECT origin, '".$rname."', color, position, controller
FROM robots
WHERE controller = 'remote'

In order to avoid SQL injections and other vulnerabilities that come with the integration of variables straight in the SQL statement (not a huge problem in this case, but it's good practice), you can use PDO with prepared statements.为了避免在 SQL 语句中直接集成变量带来的 SQL 注入和其他漏洞(在这种情况下不是一个大问题,但这是一个很好的做法),您可以将 PDO 与准备好的语句一起使用。 The following code loops through each of the steps for each MySQL query and updates the robot name:以下代码循环执行每个 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);
}

The above code does the SQL Select query, and for each row it finds, $row , It inserts the old data using the second defined query while still adding the robot name.上面的代码执行 SQL Select 查询,对于它找到的每一行, $row ,它使用第二个定义的查询插入旧数据,同时仍然添加机器人名称。 DO keep in mind $pdo is defined as the PDO object, and you will need PDO support in your PHP install.千万记住$pdo被定义为PDO对象,你需要在你的PHP PDO支持安装。 Working example can be found here .可以在此处找到工作示例。 Cheers!干杯!

You can split the task for 2 parts:您可以将任务分为两部分:

  • get data from MySQl从 MySQl 获取数据

  • nsert new data updated by PHP插入由 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'] ]); }

Here the live code PHPize.online这里是实时代码PHPize.online

Another example with named parameters:另一个带有命名参数的例子:

$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 it here PHPize 在这里

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

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