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