猿问

通过php在mysql中用空值更新日期时间

我正在使用此代码将我的数据时间字段更新为 NULL,php 版本 7.3.7


    if($_POST['value']=='0000-00-00 00:00:00'){

      $timestamp=NULL;

    }else {

      $dateTime = $_POST['value'];

      $timestamp = date('Y-m-d H:i', strtotime($_POST['value']));

   }

$query="update forms set $_POST[limitInputField]='$timestamp' where  formid='$_POST[formId]'";

$result=$dbCnn->query($query)or die($dbCnn->error);

当 $timestamp 为空时它会出错:


日期时间值不正确:'' for column farsifor_m.forms.enddate 在第 1 行


但是,当我引用“NULL”并删除查询中 $timestamp 周围的引号时,如果 $timestamp 为 null,则它可以正常工作,但如果 $timestamp 值不为 null,则会出现错误。


   if($_POST['value']=='0000-00-00 00:00:00'){

     $timestamp="NULL";

   }else {

     $dateTime = $_POST['value'];

     $timestamp = date('Y-m-d H:i', strtotime($_POST['value']));

   }

  $query="update forms set $_POST[limitInputField]=$timestamp where       formid='$_POST[formId]'";

    $result=$dbCnn->query($query)or die($dbCnn->error);


拉丁的传说
浏览 290回答 3
3回答

繁星淼淼

学习使用准备好的语句;并且不要注入 post 变量来“构建”查询。话说回来:您可以NULLIF使用方便。在以下示例中,特定值0000-00-00 00:00:00将转换为 NULL:UPDATE forms SET col = NULLIF(:timestamp, '0000-00-00 00:00:00') WHERE formid = :formid或者你可以简单地:UPDATE forms SET col = :timestamp WHERE formid = :formid并使用 PHP 传递包含字符串或null.

料青山看我应如是

您可以通过对代码进行一些细微更改来解决此问题(注意单引号和双引号):    if($_POST['value']=='0000-00-00 00:00:00'){      $timestamp="NULL";    }else {      $dateTime = $_POST['value'];      $timestamp = "'".date('Y-m-d H:i', strtotime($_POST['value']))."'";   }$query="update forms set $_POST[limitInputField]=$timestamp where  formid='$_POST[formId]'";这样,如果您在时间戳中设置 NULL 值,则查询将如下所示:update forms set limitInputField=NULL where formid='123'但是如果你在那里放一个值,它看起来像这样:update forms set limitInputField='2019-09-03 17:08' where formid='123'重要的是要注意在设置值时 NULL 周围没有引号,但在日期周围有引号。

吃鸡游戏

$date = $_POST['Date']; //get date from form$time = $_POST['Time']; //get time from formif(strtotime($date.$time)==0){ // check if null or not     $AboutDate = "0000-00-00 00:00:00"; }else{                            $AboutDate = date("Y-m-d H:i", strtotime($date.$time)); }然后更新/插入 SQLUPDATE xxx(table) SET xxx(column) = NULLIF('$AboutDate','0000-00-00 00:00:00') WHERE xxxx = xxxxx我们走吧宝贝
随时随地看视频慕课网APP
我要回答