如何从PHP向sql数据库仅提交非空变量?
我是初学者。我有一个更新字段,其中只有两个字段是必填字段。但当我更新时,sql数据库中的所有其他字段都更新为空白。有没有办法只在SQL中提交非空字段,或者我必须验证每个字段并为每个字段编写if(!empty())大小写和不同的SQL语句如何从PHP向sql数据库仅提交非空变量?,php,sql,Php,Sql,我是初学者。我有一个更新字段,其中只有两个字段是必填字段。但当我更新时,sql数据库中的所有其他字段都更新为空白。有没有办法只在SQL中提交非空字段,或者我必须验证每个字段并为每个字段编写if(!empty())大小写和不同的SQL语句 This is my query after correcting <?php define("DB_SERVER", "localhost"); define("DB_USER", "root"); define("DB_PASSWORD", "");
This is my query after correcting
<?php
define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "");
define("DB_DATABASE", "testingtimelines");
$connect = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_DATABASE);
if(isset($_POST['submit'])){
$TA = $_POST['tharea'];
$Brand = $_POST['brand'];
$JobType = $_POST['jobtype'];
$DevLead = $_POST['devlead'];
$OnsiteDPM = $_POST['OnsiteDPM'];
$ISDAY0 = $_POST['isday0'];
$VeevaNo = $_POST['VeevaNo'];
$SiteName = $_POST['sitename'];
$SiteType = $_POST['sitetype'];
$AuthorURL = $_POST['authorurl'];
$BFWURL = $_POST['bfwurl'];
$Target = $_POST['target'];
$Complexity = $_POST['complexity'];
$Developer = $_POST['Developer'];
$PlannedStartDate = $_POST['plandate'];
$PlannedActivity = $_POST['plannedactivity'];
$TR = $_POST['ingredients'];
$TestingResource = implode(", ",$TR);
$ActualStartDate = $_POST['actualdate'];
$ActivityStatus = $_POST['activitystatus'];
$ActualClosureDate = $_POST['closedate'];
$Comments = $_POST['Comments'];
$PlannedEndDate = $_POST['enddate'];
$sql = $connect->prepare("UPDATE `testingdashboard` SET `TA`=IF(`TA`='',?,`TA`),
`Brand`=IF(`Brand`='',?,`Brand`),
`JobType`=IF(`JobType`='',?,`JobType`),
`DevLead`=IF(`DevLead`='',?,`DevLead`),
`OnsiteDPM`=IF(`OnsiteDPM`='',?,`OnsiteDPM`),
`ISDAY0`=IF(`ISDAY0`='',?,`ISDAY0`),
`SiteName`=IF(`SiteName`='',?,`SiteName`),
`SiteType`=IF(`SiteType`='',?,`SiteType`),
`AuthorURL`=IF(`AuthorURL`='',?,`AuthorURL`),
`BFWURL`=IF(`BFWURL`='',?,`BFWURL`),
`Target`=IF(`Target`='',?,`Target`),
`Complexity`=IF(`Complexity`='',?,`Complexity`),
`Developer`=IF(`Developer`='',?,`Developer`),
`PlannedStartDate`=IF(`PlannedStartDate`='',?,`PlannedStartDate`),
`TestingResource`=IF(`TestingResource`='',?,`TestingResource`),
`ActualStartDate`=IF(`ActualStartDate`='',?,`ActualStartDate`),
`ActivityStatus`=IF(`ActivityStatus`='',?,`ActivityStatus`),
`ActualClosureDate`=IF(`ActualClosureDate`='',?,`ActualClosureDate`),
`Comments`=IF(`Comments`='',?,`Comments`),
`PlannedEndDate`=IF(`PlannedEndDate`='',?,`PlannedEndDate`),
WHERE `VeevaNo`='$VeevaNo' AND `PlannedActivity`='$PlannedActivity'");
$sql->bind_param("ssssssssssssssssssss", $TA, $Brand, $JobType, $DevLead, $OnsiteDPM, $ISDAY0, $SiteName, $SiteType, $AuthorURL, $BFWURL, $Target, $Complexity, $Developer, $PlannedStartDate, $TestingResource, $ActualStartDate, $ActivityStatus, $ActualClosureDate, $Comments, $PlannedEndDate);
$sql->execute();
if(mysqli_query($connect,$sql)){
//header("localhost/testing/list.php");
echo "success";
$sql->close();
header('location:new.php');
}
?>
这是我更正后的查询
如您所说,您可以通过PHP中的empty()
进行检查,或者尝试利用SQL并使用:
UPDATE mytable t
SET t.col = IF(foo='',t.col,foo)
WHERE ...
编辑:我也建议使用。因为现在您很容易受到攻击。这更像是一个设计问题,假设用户正在填写表单,您可以从数据库中检索行值并预先填写表单,然后,当他们提交值时,您将只是覆盖现有数据,而不是用冗长的SQL语句检查值是否为空
其次,始终验证和清理您的用户输入,永远不要信任它。这不仅可以防止错误(未定义的索引[…]),还可以防止恶意攻击您的站点
第三,既然您使用的是mysqli*
,为什么不使用预先准备好的语句来防止
注意:您的formysqli*
是OOP格式的,但您正在进一步使用过程函数。为了保持一致性,请选择过程或OO
阅读材料
传递一个具有更新值的数组您是将所有新数据添加到db表中,还是真的在更新旧数据?更新旧数据。例如,我已经填充了所有必填字段,为了避免剩余字段为空,现在我正在尝试更新那些剩余字段mysqli.*
也准备了语句。如果该变量为空,则必须在参数中检查它`JobType`=if(?=”,`JobType`)