[英]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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.