我知道这个问题可能已经问过很多遍了,尽管我在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
处出现相同的错误
答案 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';