【问题标题】:How to pass null value to database mysql with date type from php如何使用来自php的日期类型将空值传递给数据库mysql
【发布时间】:2018-04-06 09:47:46
【问题描述】:

我花了太多时间试图将 null 值传递给数据库中的 null 列,而我在谷歌上搜索的所有解决方案都不适用于我的代码 它给了我这个错误:

SQLSTATE[22007]:日期时间格式无效:1292 日期值不正确: '' 用于第 2 行的列 'DateOfImplementation'

这是更新表的查询:

<?php

function updateDates($ApplicationID , $DateOfImplementation , $DueDate ,$FinanceDeliveryDate ,$FinanceReceiptDate){
    try {
        $dbc = new db();
        $dbhc = $dbc->connect();

        $sql = "UPDATE `applicationstudy` SET 
                `DateOfImplementation` = '$DateOfImplementation',
                `DueDate` = '$DueDate',
                `FinanceDeliveryDate` = '$FinanceDeliveryDate',
                `FinanceReceiptDate` = '$FinanceReceiptDate'
                WHERE `ApplicationID` = '$ApplicationID' ;";
        if( $dbhc->exec( $sql ) ) {
            return true;
        }
        else {
            return false;
        }
        $dbhc = null;
    } catch(PDOException $e) {
        echo $e->getMessage();
    }
}

?>

这是插入日期的帖子:

<?php

if ( isset( $_POST["applicationid"] ) ) {
    $applicationid = $helperObj->prepar_data( $_POST["applicationid"] );
}   

if( ! is_null( $_POST["FinanceDeliveryDate"] ) ) {
    $FinanceDeliveryDate = $helperObj->prepar_data( $_POST["FinanceDeliveryDate"] );
} else {
    $FinanceDeliveryDate = 'NULL';
}

if( ! is_null( $_POST["FinanceReceiptDate"] ) ) {
    $FinanceReceiptDate = $helperObj->prepar_data( $_POST["FinanceReceiptDate"] );

} else {
    $FinanceReceiptDateFil= 'NULL';
}

if( ! is_null( $_POST["DueDate"] ) ) {
    $DateOfFirstInstallment = $helperObj->prepar_data( $_POST["DueDate"] );
} else {
    $DateOfFirstInstallment ='NULL';
}
if( ! is_null( $_POST["DateOfImplementation"] ) ) {
    $DateOfImplementation = $helperObj->prepar_data( $_POST["DateOfImplementation"] );
} else {
    $DateOfImplementation = 'NULL';
}
$status = $appstudyobj->updateDates( $applicationid , $DateOfImplementation , $DateOfFirstInstallment ,$FinanceDeliveryDate ,$FinanceReceiptDate );
?>

如果函数中没有单引号,我如何插入空值它可以工作,但如果有日期,则不采用正确的值

【问题讨论】:

  • 如果您的列默认为空,只需在插入语句中跳过它们
  • 如果你已经在 mysql 中将该字段定义为日期字段,则只能从 PHP 中提供日期(字符串)。它适用于单引号'NULLL',因为这是(string) Null
  • 我不能在插入中跳过它们,因为他更新了太多提交的日期,所以我必须将它们留在同一个语句中@LelioFaieta
  • @RaheelKhan 那么如何解决它
  • @LelioFaieta 说的是正确的方法!当您考虑 NULL"NULL" 相同时,您的方法是错误的。如果我愿意,我真的不想将其保留为NULL,我会将日期传递为 00:00:00 以区分。

标签: php mysql database post null


【解决方案1】:
$sql = "UPDATE `applicationstudy` SET 
        `DateOfImplementation` = '$DateOfImplementation',
        `DueDate` = '$DueDate',
        `FinanceDeliveryDate` = '$FinanceDeliveryDate',
        `FinanceReceiptDate` = '$FinanceReceiptDate'
        WHERE `ApplicationID` = '$ApplicationID' ;";

你在这里做了一种';'不应在“$ApplicationID”之后出现。

而且,您不应该在引号下传递 NULL。尝试不使用引号,即 NULL 而不是 'NULL'。 希望这会有所帮助!

【讨论】:

    【解决方案2】:

    您应该使用prepared statements 插入空值,例如。

    //Testing
    $DateOfImplementation = null;
    $FinanceDeliveryDate = null;
    
    $stmt = $dbhc-> prepare("UPDATE `applicationstudy` SET 
            `DateOfImplementation` = ?,
            `DueDate` = ?,
            `FinanceDeliveryDate` = ?,
            `FinanceReceiptDate` = ?
            WHERE `ApplicationID` = ?")
    $stmt->bind_param('sssss', $DateOfImplementation, $DueDate, $FinanceDeliveryDate, $FinanceReceiptDate,  $ApplicationID)
    
    $stmt->execute()
    

    引用自PHP/MySQL Insert null values & PHP UPDATE prepared statement

    【讨论】:

    【解决方案3】:

    php 不会将 null 转换为 NULL

    要解决此问题,请在执行查询之前检查 Null 值。

    使用 "NULL" 代替 null。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2012-01-05
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多