使用pdo php将数据从一个表移动到另一个表

4c8rllxm  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(424)

我知道这可能会被问很多次,我就是找不到合适的关键字来搜索我的问题,虽然我在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

qeeaahzv

qeeaahzv1#

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

hrysbysz2#

每个查询的第一个结尾是 ; pdo允许多个查询,但必须正确声明和替换每个查询。。

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

如果再次出现错误,则可能是两个表的模式不匹配(或insert select不匹配),因此请尝试使用explict columns声明

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

相关问题