簡體   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