繁体   English   中英

使用PDO PHP将数据从一个表移动到另一个表

[英]Move Data from one table to another table using PDO php

我知道这可能已经问了很多遍了,尽管我找到了几种在mysqli上执行此操作的方法,但我只是找不到合适的关键字来搜索我的问题。 尽管我想知道是否有人可以在PDO上为我提供帮助。

<?php
$dsn = 'mysql:host=localhost;dbname=dbsample';
$username = 'root';
$password = '';
$options = [];
try {
$connection = new PDO($dsn, $username, $password, $options);
} 
catch(PDOException $e) {

$id = $_GET['id'];
$sql = 'INSERT INTO table2 SELECT * FROM table1 WHERE id=:id';
$sql. = 'DELETE FROM table1 WHERE id=:id';
$statement = $connection->prepare($sql);
if ($statement->execute([':id' => $id])) {
 header("Location:.");
}

更新:这是我得到的错误

Parse error: syntax error, unexpected '='

我试过删除$sql. = $sql. =但最后只会得到另一个错误。

还尝试删除. ,并在结尾处Parse error: syntax error, unexpected end of file in相同的错误Parse error: syntax error, unexpected end of file in

PDO不允许您在单个调用中执行两个查询。 因此,您需要准备两个不同的查询,然后分别执行它们。

您应该使用事务来确保数据库在两个查询之间是一致的。

$stmt1 = $connection->prepare('INSERT INTO table2 SELECT * FROM table1 WHERE id=:id');
$stmt2 = $connection->prepare('DELETE FROM table1 WHERE id=:id');
$connection->beginTransaction();
if ($stmt1->execute([':id' => $id]) && $stmt2->execute([':id' => $id])) {
    $connection->commit();
    header("Location:.");
} else {
    $connection->rollBack();
}

首先以结束每个查询; PDO允许多个查询,但必须正确声明和终止每个查询。

  $sql = 'INSERT INTO table2 SELECT * FROM table1 WHERE id=:id;';
  $sql. = 'DELETE FROM table1 WHERE id=:id';

那么如果再次出错,则可能是两个表的模式不匹配(或插入选择不匹配),因此请尝试使用显式列声明

  $sql = 'INSERT INTO table2  (col1, col2, ..,coln) 
            SELECT (col1, col2, ..,coln)  
            FROM table1 
            WHERE id=:id; ';
  $sql. = ' DELETE FROM table1 WHERE id=:id';

暂无
暂无

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

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