PHP / MySQL - 使用另一个表中的数据更新SQL表

时间:2014-02-03 11:33:23

标签: php mysql sql

在我建立的工人班次监控/会计系统中,有一个删除员工的选项。这样可以正常工作,但我想将已删除的工作人员的班次存档。

我调查了它,似乎最好的方法是在删除之前将我的班次表更新到另一个表中。我通过另一个Stack Overflow post查找了如何执行此操作但是我收到了错误:fatal error call to member function on a non-object

基于我能找到的内容,当您尝试传递空值时会导致此错误,这让我感到困惑,因为我尝试传递的值是GET并且在我测试它时工作正常。 / p>

$sql = "
  UPDATE table_archive
     SET table_shift.shift_date = table_archive.shift_date,
         table_shift.start_time = table_archive.start_time,
         table_shift.end_time = table_archive.end_time,
         table_shift.total_hours = table_archive.total_hours,
         table_shift.rate_of_pay = table_archive.rate_of_pay,
         table_shift.uniqueid = table_archive.uniqueid, 
         table_shift.addedBy = table_archive.addedBy,
         table_shift.paidRate = table_archive.paidRate,
         table_shift.totalPaid = table_archive.totalPaid
    FROM table_shift, table_archive
   WHERE table_shift.uniqueid = ?
";

$stmt = $connection->prepare($sql);
$deleteid = htmlentities($_GET['id']);
$stmt->bind_param('s', $deleteid);
$stmt->execute();

我不知道为什么这不会通过,GET不能是一个空值,因为我正在使用的测试删除传递相同的变量并且工作正常。 mysqli_query($connection,"DELETE FROM table_staff WHERE uniqueid='$deleteid'")

可能是我错误地使用了SQL代码,或者我忘记了一些愚蠢的事情,但这让我很难过。如果没有修复此代码,欢迎任何其他有关如何实现预期功能的建议。

2 个答案:

答案 0 :(得分:1)

你不能更新。你的语法错了。

相反,请使用:

INSERT INTO table_archive
SELECT * FROM table_shift WHERE table_shift.uniqueid = ?

答案 1 :(得分:0)

bindParam的使用是否正确?

如果您使用?,它应如下所示:

SELECT ...
WHERE column_name = ?

$sth->bindParam(1, $value_in_php, PDO::PARAM_INT);

如果不是?:param_name请使用此项:

SELECT ...
WHERE column_name = :param

$sth->bindParam(':param', $value_in_php, PDO::PARAM_INT);

您的错误听起来不像是SQL错误,而是PHP错误。

如果要更新table_archive表,则SQL看起来不正确。它应该是这样的:

UPDATE table_archive
   SET table_archive.shift_date        = table_shift.shift_date
     , to_table_that_should_be_updated = from_table_with_value_to_update
  FROM table_shift
 WHERE table_shift.uniqueid = ?