如果php中的输入变量为空,如何保持数据库表数据不被修改?

如果php中的输入变量为空,如何保持数据库表数据不被修改?,php,mysql,Php,Mysql,我遇到了一个问题,说我有以下几点: $stmt = $conn->prepare("UPDATE grades SET exam1=?, exam2=? WHERE user='$user' AND course='$course'"); $stmt->bind_param("ii", $exam1, $exam2); 我有两个不同的变量$exam1,$exam2,所有这些变量都是用html中的表单数据分配的。但是,当我提交表单时,我只想更新表中的某些数据,比如说我更新了$exam

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

$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
这将使
grades
exam2
字段变为
0
,而不是其原始值


那么有没有办法防止空变量修改表数据呢?我本可以为不同的考试分别做两个单独的prepare语句,但我觉得应该有更好的方法,因为如果有很多列,我只想更新一些列,那该怎么办?

我会动态构建您的查询。 比如:

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

顺便问一下,为什么您要为
exam1
exam2
值使用绑定参数,而不是为
user
course
使用绑定参数?

提前检查您是否有
exam2
的值。如果没有,则从数据库中选择当前值。或者,您可以使用检查来修改查询本身。或者动态创建更新列(需要更改的唯一值),或者只包含相同的值