微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 仅更新已更改的数据库值

我有一个表格,我试图用来跟踪批量的啤酒.由于酿造过程需要数周甚至数月,我无法一次完成表格.当我第一次为啤酒创建记录时,我的大多数值都设置为NULL.当我检索记录并尝试更新它时,它还将我的所有NULL值更新为零.如何从表单中仅将更改的值发送到数据库,以便其余的将保留为NULL?

以下是我的更新代码示例(请原谅任何PDO违规行为 – 这是我第一次尝试使用PDO).

    <?PHP
//Connect to Database
try {
    $DBH = new PDO('MysqL:host=localhost; dbname=dbname', 'user', 'password');
    }
catch (PDOException $e) {
    echo $e->getMessage();
    exit();
}
//Build Update sql Query
$update = "UPDATE brewlog
          SET
            BrewDate = :BrewDate,
            EndOfPrimary = :EndOfPrimary,
            EndOfSecondary = :EndOfSecondary,
            PackagingDate = :PackagingDate,
            AnticipatedOG = :AnticipatedOG,
          WHERE ID = :ID";
//Prepare Query, Bind Parameters, Excute Query
$STH = $DBH->prepare($update);
$STH->bindParam(':ID', $_POST['ID'],PDO::ParaM_INT);
$STH->bindParam(':BrewDate', $_POST['BrewDate'],PDO::ParaM_STR,10);
$STH->bindParam(':EndOfPrimary', $_POST['EndOfPrimary'],PDO::ParaM_STR,10);
$STH->bindParam(':EndOfSecondary', $_POST['EndOfSecondary'],PDO::ParaM_STR,10);
$STH->bindParam(':PackagingDate', $_POST['PackagingDate'],PDO::ParaM_STR,10);
$STH->bindParam(':AnticipatedOG', $_POST['AnticipatedOG'],PDO::ParaM_INT);
$STH->execute();
?>

解决方法:

您可能希望在绑定之前验证数据.说点像

if(!empty($_POST['EndOfPrimary'])) {
   $eop = $_POST['EndOfPrimary'];
} else {
   $eop = NULL;
}

然后绑定

$STH->bindParam(':EndOfPrimary', $eop,PDO::ParaM_STR,10);

编辑:
 您还可以使用此验证来检查字段是否留空.看起来你可能想要输入一个日期,所以也许你会检查用户是否真的输入了一个日期,如果没有,那么将它们发回给表格,并提供一些有用的消息,说明他们犯了错误的地方.这是我用来验证日期的正则表达式.

function pcre_date($subject) {
return preg_match('/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/', $subject);
/*
 *  matches 01/01/1984, 1/1/1984, but NOT 1/1/84
 *  wants mm/dd/yyyy
 */
} // returns 0 for non valid, 1 for valid

然后我会用它来验证

if(!empty($_POST['EndOfPrimary'])) {
    if(pcre_date($_POST['EndOfPrimary'])) {
        $eop = $_POST['EndOfPrimary'];
    } else {
        $form_errors[] = "Please format date as mm/dd/yyyy.";
    }
} else {
    $eop = NULL;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐