我目前正在使用一个 PHP 框架,它基本上使用 PDO 的包装器,并且被一个问题难住了。我有一个页面,它接受任意数量的帖子变量,这些变量可以是以下内容的任意组合:
":fullname" => $_POST['fullName'],
":universityID" => $_POST['university'],
":gpa" => $_POST['gpa'],
":major" => $_POST['major'],
":gradYear" => $_POST['gradYear'],
":photo" => "",
":description" => $_POST['description'],
"howDidYouHear" => $_POST['howDidYouHear']
我有一个更新语句,应该如下所示:
$affectedRows = getDatabase()->execute('UPDATE user SET universityID = :universityID,
gpa = :gpa, etc, WHERE fullName=:fullName', array(':universityID' =>
$_POST['universityID'], ':gpa' => $_POST['gpa']));
现在的问题是,如果我执行这种更新语句,我将覆盖表中的旧数据,其中大部分仍然有效。我想要做的只是更新我有新信息的行,而不触及其他行。有没有办法确定查询中哪些应该更改,哪些不应该更改?
最佳答案
假设如果您在某个字段中传递空值,您希望它保留原始值。在 UPDATE
子句中使用 if
,示例
UPDATE user
SET universityID = IF(:universityID = '', universityID, :universityID),
gpa = IF(:gpa = '', gpa, :gpa), ....
或者类似的东西
关于php - 将 mysql PDO 与 UPDATE 命令一起使用,但不要覆盖所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12633004/