如何发送“;空”;或者通过PHP将空值传递给数据库


How to send "null" or empty value to database through PHP?

我有一个jqgrid,它的日期列以0/0/0000格式发布,如果为空,则将"null"发送到我的php文件,然后插入到MYsql列。它发布"null",但不向数据库列发送"null"命令。我错过了什么?Firephp说,在这一点上,我的日期栏输入都是"1969-12-31"。我该怎么做才能将"null"正确地发布到这些列中?***更新:这是$_REQUEST:***的var dumb

array(12) {
  ["name"]=>string(24) "FABTECH B2B Presentation"
  ["id_continent"]=>string(6) " Ramon"
  ["lastvisit"]=>string(10) "12/31/2104"
  ["cdate"]=>string(9) "8/22/2014"
  ["ddate"]=>string(9) "9/14/2014"
  ["notes"]=>string(69) "B2B machines are C1 AJ and HG ATC.  Waiting for part data from Yoshi."
  ["hello"]=>string(2) "No"
  ["mydate"]=>string(4) "null"
  ["oper"]=>string(4) "edit"
  ["id"]=>string(3) "184"
  ["PHPSESSID"]=>string(32) "93de884f9e02d507ff3662f63149f9f3"
  ["SQLiteManager_currentLangue"]=>string(2) "10"
}

我的代码:

    $crudColumns =  array(
    'id' =>'id'
    ,'name'=>'name'
    ,'id_continent'=>'id_continent'
,'lastvisit'=>'lastvisit'
    ,'cdate'=>'cdate'
    ,'ddate'=>'ddate'
    ,'notes'=>'notes'
    ,'hello'=>'hello'
    ,'mydate'=>'mydate'
);
function fnCleanInputVar($string){
    //$string = mysql_real_escape_string($string);
    return $string;
    }
    /*----====|| GET and CLEAN THE POST VARIABLES ||====----*/
    foreach ($postConfig as $key => $value){ 
        if(isset($_REQUEST[$value])){
            $postConfig[$key] = fnCleanInputVar($_REQUEST[$value]); 
        }
    }
    foreach ($crudColumns as $key => $value){ 
        if(isset($_REQUEST[$key])){
            if ($key == 'lastvisit' || $key == 'cdate' || $key == 'ddate' || $key == 'mydate' ) {
                $crudColumnValues[$key] = '"'.date('Y-m-d', strtotime($_REQUEST[$key])).'"';
            } else {
                $crudColumnValues[$key] = '"'.fnCleanInputVar($_REQUEST[$key]).'"';
            }
        }
    } 
    FB::info($crudColumnValues, "Dates");
    /*----====|| INPUT VARIABLES ARE CLEAN AND CAN BE USED IN QUERIES||====----*/
Mysql query
case $crudConfig['update']:
        /* ----====|| ACTION = UPDATE ||====----*/
        if($DEBUGMODE == 1){$firephp->info('UPDATE','action');}
        $sql = 'update '.$crudTableName.' set ';
        /* create all of the update statements */
        foreach($crudColumns as $key => $value){ $updateArray[$key] = $value.'='.$crudColumnValues[$key]; };
        $sql .= implode(',',$updateArray);
        /* add any additonal update statements here */
        $sql .= ' where id = '.$crudColumnValues['id'];
        if($DEBUGMODE == 1){$firephp->info($sql,'query');}
        mysql_query( $sql ) 
        or die($firephp->error('Couldn t execute query.'.mysql_error()));
        break;

检查网格中的参数是否为null,并将NULL而不是日期放入数据库中。

foreach ($crudColumns as $key => $value){ 
    if(isset($_REQUEST[$key])){
        if ($key == 'lastvisit' || $key == 'cdate' || $key == 'ddate' || $key == 'mydate' ) {
            if ($_REQUEST[$key] == 'null') {
                $crudColumnValues[$key] = 'NULL';
            } else {
                $crudColumnValues[$key] = '"'.date('Y-m-d', strtotime($_REQUEST[$key])).'"';
            }
        } else {
            $crudColumnValues[$key] = '"'.fnCleanInputVar($_REQUEST[$key]).'"';
        }
    }
} 

似乎您可能混淆了空和null。空字符串将被解释为",而null将被解释成"null",这是很大的区别。试试这个。

编辑:在看了PHP手册之后,如果您试图向数组键添加一个null值,它似乎会更改为"。

首先,创建这样的阵列

['mydate'] => ''

更改日期格式。

foreach ($crudColumns as $key => $value){ 
    if(isset($_REQUEST[$key])){
if ($key == 'lastvisit' || $key == 'cdate' || $key == 'ddate' || $key == 'mydate' ) {       
    if (strtotime($value)) {
       $value = '"'.date('Y-m-d', $value).'"';
    } else {
      $value = "";
    }
} else {
    $crudColumnValues[$key] = fnCleanInputVar($_REQUEST[$key]);
}

此外,问题的一部分是您正在指定键,但需要更改值。