1

PHP を使用して mysql の挿入ステートメントをフォーマットしようとしていますsprintfが、そうするとレコード列0ではなくa が挿入されます。書式設定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列を挿入しようとすると問題が発生しています。指示どおりに整数を挿入したいので、ではなく挿入します。私に何ができる?NULLsprintf%d0NULL

4

1 に答える 1

2

を使用する必要があります%s。その理由は、PHPnullの場合は整数の有効な値ではありませんが、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 に答える