Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过php在mysql中使用空值更新datetime_Php_Mysql - Fatal编程技术网

通过php在mysql中使用空值更新datetime

通过php在mysql中使用空值更新datetime,php,mysql,Php,Mysql,我用这段代码将我的datatime字段更新为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 s

我用这段代码将我的datatime字段更新为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为空时,它给出错误:

第1行的farsifor\m.forms.enddate列的datetime值“”不正确

但当我在查询中引用“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);

您可以通过对代码稍作更改来解决此问题(请注意单引号和双引号):

这样,如果在时间戳中设置空值,查询将如下所示:

update forms set limitInputField=NULL where formid='123'
update forms set limitInputField='2019-09-03 17:08' where formid='123'
但是如果你把一个值放进去,它会是这样的:

update forms set limitInputField=NULL where formid='123'
update forms set limitInputField='2019-09-03 17:08' where formid='123'

重要的是要注意,在设置值时,NULL周围没有引号,但日期周围有引号。

学习使用准备好的语句;并且不要注入post变量来“构建”查询。尽管如此:

你可以使用方便。在以下示例中,特定值
0000-00-00 00:00:00
将转换为空值:

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与空字符串不同,因此它出错。使用准备好的语句可以绕过这个问题。这是使用说明,还有其他方法吗?我的代码在PHP5.6中正常工作。但是7.3.7中没有,在mysql中你可以使用now()函数,我很惊讶它在5.6中可以工作。预处理语句和参数绑定是将数据传递到SQL查询中最安全的方法,可以避免大量麻烦。由于您留下了SQL注入漏洞,这个答案可能会被否决。为了便于理解,我只是基于他的代码。另外,要让SQL注入通过日期函数工作,必须是一个非常聪明的黑客P(但谢谢你指出这一点。我是新来这里投稿的。)关于
$\u POST[limitInputField]
呢<代码>$\u POST[formId]?始终使用准备好的语句。如何在prapare语句中使用这种查询?