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

时间:2018-08-23 17:21:08

标签: php mysql pdo

我知道这个问题可能已经问过很多遍了,尽管我在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. =,但最后只得到另一个错误。

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

2 个答案:

答案 0 :(得分:2)

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();
}

答案 1 :(得分:0)

首先使用; 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';