PDO仅在所有参数都已满时保存

时间:2013-08-09 13:05:17

标签: php pdo insert sql-insert

您好我有一个插入和更新声明。更新工作正常,我有两个字段,一个category_of_taxom和number_of_taxom。更新允许更改任何一个,它将更新记录。

但是,插件几乎相同,如果它尚未存在则会创建记录。如果我输入两个选项的值,但是如果只输入一个选项,它会不会提交任何内容?代码非常复杂,包含所有变量名称,但我想我可能需要另一个if语句或其他东西?检查是否只输入了一个?或者这是一个所有参数都需要填充的PDO?

   $stmt6 = $conn ->prepare("UPDATE record_tbl SET category_of_taxom =?, number_of_taxom =? WHERE sheet_id = ? AND line = 6");
   $stmt6->bindParam(1, $category_of_taxom66);
   $stmt6->bindParam(2, $number_of_taxom66);
   $stmt6->bindParam(3, $sheet_id);
      $category_of_taxom66 = $_POST['categorySelect6fromDB'];
      $number_of_taxom66 = $_POST['number_of_taxom6'];
   $stmt6->execute();       
       echo "Saved!";
}
    else 
            {       
        if (isset($_POST['categorySelect6fromDB'])) {
         $category_of_taxom66 = $_POST['categorySelect6fromDB'];
         $param_cat = PDO::PARAM_INT;
 }
  else {
         $category_of_taxom66 = NULL;
         $param_cat = PDO::PARAM_NULL;
 }
    if (isset($_POST['number_of_taxom6'])) {
         $number_of_taxom66 = $_POST['number_of_taxom6'];
         $param_num = PDO::PARAM_INT;
 }
else {
         $number_of_taxom66 = NULL;
        $param_num = PDO::PARAM_NULL;
 }
 $stmt66 = $conn ->prepare("INSERT INTO record_tbl (line, taxom_id, category_of_taxom, number_of_taxom, sheet_id) VALUES (6,6,?,?,?)");
            $stmt66->bindParam(1, $category_of_taxom66, $param_cat);
            $stmt66->bindParam(2, $number_of_taxom66, $param_num);
            $stmt66->bindParam(3, $sheet_id);
          $stmt66->execute();
            echo "New Record Inserted!";        
   }
            }   

1 个答案:

答案 0 :(得分:1)

我正在考虑几种情况,如果这里的情况不合适,可能稍后会编辑答案,但由于作者说:

  

抱歉:始终设置工作表ID,但$ category_of_taxom66和   $ number_of_taxom66可能会或可能不会设置一些时间。我有一个if   声明就在这一切之上。检查,好像没有设置它   跳过更新或插入。但是,如果其中一个设置它需要   加入。

似乎插件应该发生,但是如果未设置的值会发生什么,它通常应该变为NULL?

$stmt66 = $conn ->prepare("INSERT INTO record_tbl (line, taxom_id, category_of_taxom, number_of_taxom, sheet_id) VALUES (6,6,?,?,?)");
         $stmt66->bindParam(1, $category_of_taxom66);
         $stmt66->bindParam(2, $number_of_taxom66);
         $stmt66->bindParam(3, $sheet_id);
         $category_of_taxom66 = isset($_POST['categorySelect6fromDB']) ? $_POST['categorySelect6fromDB'] : NULL;
         $number_of_taxom66 = isset($_POST['number_of_taxom6']) ? $_POST['number_of_taxom6'] : NULL;
         $stmt66->execute();

我认为$ category_of_taxom66的值将是用户输入(如果存在),否则为NULL。


另一种变化:

if (isset($_POST['categorySelect6fromDB'])) {
    $category_of_taxom66 = $_POST['categorySelect6fromDB'];
    $param_cat = PDO::PARAM_INT;
}
else {
    $category_of_taxom66 = NULL;
    $param_cat = PDO::PARAM_NULL;
}
if (isset($_POST['number_of_taxom66'])) {
    $number_of_taxom66 = $_POST['number_of_taxom66'];
    $param_num = PDO::PARAM_INT;
}
else {
    $number_of_taxom66 = NULL;
    $param_num = PDO::PARAM_NULL;
}
$stmt66 = $conn ->prepare("INSERT INTO record_tbl (line, taxom_id, category_of_taxom, number_of_taxom, sheet_id) VALUES (6,6,?,?,?)");
        $stmt66->bindParam(1, $category_of_taxom66, $param_cat);
        $stmt66->bindParam(2, $number_of_taxom66, $param_num);
        $stmt66->bindParam(3, $sheet_id);
        $stmt66->execute();

因此,如果用户使用“100”填充category_taxom,但number_taxom不填充,则应生成:

        $stmt66->bindParam(1, 100, PDO::PARAM_INT);
        $stmt66->bindParam(2, NULL, PDO::PARAM_NULL);

另一种方法是在第一个例子中使用'0'而不是'NULL':

         $category_of_taxom66 = isset($_POST['categorySelect6fromDB']) ? $_POST['categorySelect6fromDB'] : 0;
         $number_of_taxom66 = isset($_POST['number_of_taxom6']) ? $_POST['number_of_taxom6'] : 0;