“如何发送”;空";还是通过PHP将空值传递给数据库?

“如何发送”;空";还是通过PHP将空值传递给数据库?,php,jqgrid,Php,Jqgrid,我有一个jqgrid,其中的日期列以0/0/0000格式发布,如果为空,则将“null”发送到我的php文件,然后插入到MYsql列。它发布“null”,但不向数据库列发送“null”命令。我错过了什么?FireHP说,此时我的日期列输入都是“1969-12-31”。如何将“null”正确地发布到这些列? ****更新:以下是var dumb for$\u请求:**** array(12) { ["name"]=>string(24) "FABTECH B2B Presentation

我有一个jqgrid,其中的日期列以0/0/0000格式发布,如果为空,则将“null”发送到我的php文件,然后插入到MYsql列。它发布“null”,但不向数据库列发送“null”命令。我错过了什么?FireHP说,此时我的日期列输入都是“1969-12-31”。如何将“null”正确地发布到这些列? ****更新:以下是var dumb for$\u请求:****

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”,差别很大。试试这个

编辑: 在阅读了PHP手册之后,如果您尝试向数组键添加空值,它似乎会更改为“”

首先,像这样创建数组

['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]);
}

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

SQL查询在哪里?您需要在查询中输入一个文本
NULL
。@Eric但如果数据库列可为NULL,您可以输入
NULL
,而不是日期。或者您应该使用参数化查询,并向其发送一个PHP
NULL
值。@Barmar看起来它不可为NULL…而且,如果不想插入非关键字段的日期字段,为什么要传递它们?只需在插入之前移除它们..谢谢你的回答,但我仍然得到相同的结果。“NULL”未插入到数据库中。它看起来像
$crudColumnValues[$key]=“NULL”没有向下发送。可能网格实际发送的是字符串
NULL
,而不是PHP空值。我已经更改了我的代码来检查它。如果这不起作用,请显示
$\u REQUEST
在应该将空日期放入数据库时包含的内容。好的,结果是$\u REQUEST=null,但仍然是1969-12-31请将
var\u dump($\u REQUEST)
的输出添加到您的帖子中。把它放在帖子里,而不是评论里,这样你就可以把它格式化成易读的格式。使用
var\u dump
非常重要,这样我们可以判断
null
是字符串还是null数据类型。所以不要使用
echo
print\r
。明白了。我马上就去。谢谢。实际上我希望它以空的形式发送。我尝试过,但结果仍然是一样的。这取决于数据库列的设置方式,但您不能将空字符串发送到datetime列,您将获得看到的默认日期。但是,如果将列的默认值设置为“空”或“空”,则应允许您插入空值。通过更改日期列的默认值,将不会插入日期,除非与查询一起专门添加。该死。“我的日期”列已默认设置为空。我尝试了你的两个建议,但结果仍然是一样的
['mydate']=>'“1969-12-31”
插入日期的变量是否正确?问题可能是您没有以正确的格式插入日期。在将日期输入数据库并发布到此处之前,请尝试回显日期。