我正在尝试使用 php sprintf
格式化 mysql 插入语句,但这样做会在记录列中插入 0
而不是 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 );
};
当尝试插入 NULL
时,问题出现在 DefectID
列上,因为它是空的。 sprintf
想要按照 %d
的指示插入一个整数,因此它插入 0
而不是 NULL
。我能做什么?
最佳答案
您将需要使用 %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']),
关于php - MySQL 使用 PHP sprintf 插入到 NULL INT 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17453714/