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

标签 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 为 null 时会出错:

Incorrect datetime value: '' for column farsifor_m.forms.enddate at row 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);

最佳答案

学习使用准备好的语句;并且不要注入(inject)后变量来“构建”查询。话虽如此:

您可以使用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的变量.

关于php - 通过php在mysql中用空值更新日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57774251/

相关文章:

php - 无法从mysql数据库加载数据

mysql - ORM中如何进行子查询?

php - mysqli_multi_query() - 返回 true 而不是返回数据

mysql - Laravel 忽略多个数据库配置

php - Laravel - leftJoin 和元素引用

php - 如何搜索指针与值不完全匹配的 PHP 数组?

php - 将 mySQL 表打印到网页

php - 导致两件事并行加载?

php - 使用自定义按钮将价格变量传递给 PayPal

javascript - 如何使用 Sequelize.js 解析复杂的查询操作?