【问题标题】:insert date null value using mysql real escape string [duplicate]使用mysql真正的转义字符串插入日期空值[重复]
【发布时间】:2016-06-04 18:57:50
【问题描述】:

如何在mysql real scape字符串中插入空日期

if (empty($DATE_PURCHASED)) {
    $DATE_PURCHASED = NULL;
} 

//sql query
$queryString = sprintf("INSERT INTO IT_ASSET_RADIO (BRAND_NAME, SERIAL_NO, DATE_PURCHASED, LICENSE_NO) 
    values ('%s','%s', '%s', '%s')",
    mysql_real_escape_string($BRAND_NAME),
    mysql_real_escape_string($SERIAL_NO),
    mysql_real_escape_string($DATE_PURCHASED),
    mysql_real_escape_string($LICENSE_NO));

$query = mysql_query($queryString ) or die("Insert failed: " . mysql_error());

如果值,我在 DATE_PURCHASED 中收到此查询无效日期的错误 为空

【问题讨论】:

  • 你的数据库字段肯定是一个“日期”字段,所以你不能只在其中插入 NULL
  • @WaqasShahid 当然可以,只要它可以为空。
  • 您不能使用转义字符串函数插入 NULL。尤其是你这样做的方式。您通过使用转义字符串和%s 将其封装在' 中专门将其声明为字符串。 NULL 不是字符串。
  • 我的替代方案是停止使用 mysql_ 并转义字符串函数,除此之外,您必须更合乎逻辑地考虑如何处理非字符串值。
  • 检查@RobbyCornelissen 提供的链接。对你有用。

标签: php mysql


【解决方案1】:
$date=mysql_real_escape_string($DATE_PURCHASED); 
if(trim($date)==''){ $date=NULL;}

在查询中使用 $date。

还有

在表中设置DATE_PURCHASED默认为NULL

【讨论】:

  • 这在严格模式下不起作用,不确定其他人。如果您指定一个空字符串,它将尝试插入一个空字符串,而不是 NULL 值。当列从插入语句中排除时,默认值很有用。
  • 我已经将 DATE_PURCHASED 设置为 null 但没有任何效果。
【解决方案2】:

尝试以 'YYYY-MM-DD HH:MM:SS' 格式传递日期字符串,如下所示:

..........mysql_real_escape_string(date('Y-m-d H:i:s', strtotime($DATE_PURCHASED))).....

【讨论】:

  • 哇!它不返回 null .. XD
  • @json 如果此答案对您有用,请接受并投票,以便其他人知道,您得到了解决方案。没有其他人会浪费时间寻找解决方案。
  • @json 它不返回 null,但是你得到了 diff 错误。您只需在传递给 mysql 查询之前检查它,如果变量为空白,则将变量设置为空白,如果它们有任何值,则必须以正确的格式将其传递给 DB。
【解决方案3】:
if (empty($DATE_PURCHASED)) {      
      $DATE_PURCHASED = NULL;
    } else {
       $DATE_PURCHASED = $data->DATE_PURCHASED;
    }
    // Surround it in quotes if it isn't NULL.
    if ($DATE_PURCHASED === NULL) {
      // Make a string NULL with no extra quotes
      $DATE_PURCHASED = 'NULL';
    }
    // For non-null values, surround the existing value in quotes...
    else $DATE_PURCHASED = "'$DATE_PURCHASED'";

$queryString = sprintf("INSERT INTO IT_ASSET_RADIO (BRAND_NAME, SERIAL_NO, DATE_PURCHASED, LICENSE_NO) 
    values ('%s','%s', $DATE_PURCHASED , '%s')",
    mysql_real_escape_string($BRAND_NAME),
    mysql_real_escape_string($SERIAL_NO),
    mysql_real_escape_string($LICENSE_NO));

$query = mysql_query($queryString ) or die("Insert failed: " . mysql_error());

【讨论】:

  • 解决我的问题! :D
猜你喜欢
  • 2011-04-12
  • 2012-07-03
  • 2017-05-19
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
相关资源
最近更新 更多