数据库没有很好地接收数据类型

时间:2014-06-09 06:24:17

标签: php sql oracle

所以最重要的是我想通过带数字类型的输入标签插入Oracle数据库值。问题是当我输入值>> 0,它工作正常。但是当我离开时如果未填充,则会出现此错误,

  

警告:oci_execute():ORA-00936:缺少表达式   C:\ XAMPP \ htdocs中\ WeltesInformationCenter \内容\制造\更新\ FabricationQC \ processExceededQcQty.php   在第76行

所以这是输入标签:

echo "<td><input name='dataMarkingQc' id='dataMarkingQc' type='number' min='0' max='$availableMarkingQc' width='5' value='0'></td>";

处理方法是这样的,

$dataMarkingQc = intval($_POST['dataMarkingQc']);

if ($dataMarkingQc   == 0){ $markingQcUser = "";   $markingQcDate = '';   } 
            else { $markingQcUser = $username; $markingQcDate =   'SYSDATE';}

$updateQcHistSql = "INSERT INTO FABRICATION_QC_HIST (MARKING_QC, MARKING_QC_DATE, MARKING_QC_SIGN) VALUES ($dataMarkingQc, $markingQcDate, '$markingQcUser')"; 

var_dump就是这个

["dataMarkingQc"]=> string(1) "0" 

所以问题是,当我在输入标签中提交0值时,会出现错误。 MARKING_QC的数据类型为int。

1 个答案:

答案 0 :(得分:1)

这是你的代码。为了便于阅读,请在此处重新格式化。清晰的格式以提高可读性总是可以更容易地调试这样的东西:

$dataMarkingQc = intval($_POST['dataMarkingQc']);

if ($dataMarkingQc == 0) {
  $markingQcUser = "";
  $markingQcDate = '';
} 
else {
  $markingQcUser = $username;
  $markingQcDate = 'SYSDATE';
}

$updateQcHistSql = "INSERT INTO FABRICATION_QC_HIST (MARKING_QC, MARKING_QC_DATE, MARKING_QC_SIGN)"
                 . " VALUES ($dataMarkingQc, $markingQcDate, '$markingQcUser')"
                 ; 

也许这会更好:

$dataMarkingQc = intval($_POST['dataMarkingQc']);

$markingQcUser = $dataMarkingQc == 0 ? null : $username;
$markingQcDate = $dataMarkingQc == 0 ? null : 'SYSDATE';

$updateQcHistSql = "INSERT INTO FABRICATION_QC_HIST (MARKING_QC, MARKING_QC_DATE, MARKING_QC_SIGN) VALUES ('$dataMarkingQc', '$markingQcDate', '$markingQcUser')"; 

我认为问题是'$dataMarkingQc周围缺少单引号$markingQcDate。我还简化了设置$markingQcUser&amp;的逻辑。 $markingQcDate使用三元逻辑并实际设置null值而不是空字符串。