1

我正在尝试使用 php 格式化 mysql insert 语句,sprintf但这样做会插入 a0而不是NULL记录列。我正在寻找解决此问题的方法,同时仍在使用sprintf格式化:

$query = sprintf("INSERT INTO `efix_lines`
                     (EventID, Serial, SerialRequired, PartNumber,
                      MfgRev, DefectID, CircuitReference, CreatorID,
                      CreatorName, Created)
                   VALUES (%d, '%s', %d, '%s', '%s', %d, '%s', %d, '%s', '%s')",
                      $oSubmitData['EventID'],
                      EVL($oSubmitData['Serial'], NULL),
                      EVL($oSubmitData['SerialRequired'], NULL),
                      EVL($oSubmitData['PartNumber'], NULL),
                      EVL($oSubmitData['MfgRev'], NULL),
                      EVL($oSubmitData['DefectID'], NULL),
                      EVL($oSubmitData['CircuitReference'], NULL),
                      $oSubmitData['CreatorID'],
                      $oSubmitData['CreatorName'],
                      $pDate );

//I made this quick EVL function to help with shorthand ternary operators within my actual syntax
function EVL( $var1, $var2 ){
   return ( empty( $var1 ) ? $var2 : $var1 );
};

DefectID尝试插入时出现问题,NULL因为它是空的。 sprintf想要插入一个整数作为%d指示,所以它插入0而不是NULL. 我能做些什么?

4

1 回答 1

2

您将需要使用%s,原因是,对于 PHP,null它不是整数的有效值,而对于 MySQL,它完全是(假设未声明该列NOT NULL)。

你可能想做类似的事情

function NVLint($var) {
  if (empty($var)) return 'NULL';
  else if (!is_numeric(!$var)) return 'NULL';
  else return round($var);
}

... sprintf ...
  NVLint($oSubmitData['DefectID']),
于 2013-07-03T16:52:35.880 回答