skip to Main Content

I’m using this code to update my datatime field to NULL,
php version 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);

it gives error when $timestamp is null:

Incorrect datetime value: ” for column farsifor_m.forms.enddate at row 1

But when I quote “NULL” and remove quotations around $timestamp in the query, if
$timestamp is null it works properly but if $timestamp value is not null it gives error.

   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);

3

Answers


  1. You can resolve this with some slight changes to your code (take note of single and double quotes):

        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]'";
    

    This way if you’re setting a NULL value in timestamp the query would look something like this:

    update forms set limitInputField=NULL where formid='123'
    

    But if you’re putting a value in there it would look like this:

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

    Important to note there are no quotes around the NULL when setting the value, but there are around the date.

    Login or Signup to reply.
  2. Learn to use prepared statements; and do not inject post variables to “build” the query. Having said that:

    You can use NULLIF for convenience. In the following example the specific value 0000-00-00 00:00:00 will be converted to NULL:

    UPDATE forms SET col = NULLIF(:timestamp, '0000-00-00 00:00:00') WHERE formid = :formid
    

    Or you can simply:

    UPDATE forms SET col = :timestamp WHERE formid = :formid
    

    And use PHP to pass a variable containing string or null.

    Login or Signup to reply.
  3. $date = $_POST['Date']; //get date from form
    $time = $_POST['Time']; //get time from form
    
    if(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)); 
    }
    

    Then Update/Insert into SQL

    UPDATE xxx(table) SET xxx(column) = NULLIF('$AboutDate','0000-00-00 00:00:00') WHERE xxxx = xxxxx
    

    Let’s go BABY

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search