我遇到了一个问题,说我有以下问题:
$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
,而不是其原始值。那么有什么方法可以防止空变量修改表数据吗?我本来可以为不同的考试分别准备两份陈述,但我觉得应该有更好的方法,因为如果有很多专栏,我只想更新一些怎么办?
最佳答案
我将动态构建您的查询。
类似于:
$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
值使用绑定参数?关于php - 如果输入变量是空的,如何保持数据库表数据不变?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33602026/