我遇到了一个问题,说我有以下问题:

$stmt = $conn->prepare("UPDATE grades SET exam1=?, exam2=? WHERE user='$user' AND course='$course'");
$stmt->bind_param("ii", $exam1, $exam2);

我有两个不同的变量$exam1, $exam2,所有这些变量都分配有来自html的表单数据。但是,当我提交表单时,我只想更新表中的某些数据,假设我更新了$exam1,并且省略了$exam2的输入字段,
$exam1 = $_GET['exam1'];
$exam2 = $_GET['exam2']; //I did not insert a value for exam2 input field

这将使gradesexam2字段变为0,而不是其原始值。
那么有什么方法可以防止空变量修改表数据吗?我本来可以为不同的考试分别准备两份陈述,但我觉得应该有更好的方法,因为如果有很多专栏,我只想更新一些怎么办?

最佳答案

我将动态构建您的查询。
类似于:

$sql = "
  UPDATE
    grades
  SET
    exam1 = ?
";

if ( ! empty($exam2) ) {
  $sql.= " , exam2 = ? "
}
$sql.= " WHERE user='$user' AND course='$course'";


$stmt = $conn->prepare($sql);

if ( ! empty($exam2) ) {
  $stmt->bind_param("ii", $exam1, $exam2);
} else {
  $stmt->bind_param("i", $exam1);
}

顺便问一下,为什么对exam1exam2值而不是usercourse值使用绑定参数?

关于php - 如果输入变量是空的,如何保持数据库表数据不变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33602026/

10-11 03:22
查看更多