【问题标题】:PDO only saving if all parameters are full仅当所有参数都已满时才保存 PDO
【发布时间】:2013-08-11 10:10:37
【问题描述】:

您好,我有一个插入和更新语句。更新工作正常,我有两个字段,一个 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!";        
   }
            }   

【问题讨论】:

  • 是的。伪代码:if isset $var_x {bindParam $var_x}。还附加到查询 +1 占位符
  • 您能否举例说明如何应用? @RoyalBg
  • 好的,让我试试答案,否则代码将是..废话:) $sheet_id 是不总是设置的变量还是什么?
  • 抱歉:工作表 ID 始终设置,但是 $category_of_taxom66 和 $number_of_taxom66 有时可能会或可能不会设置。我有一个高于一切的 if 语句。这会检查,就好像没有设置任何内容一样,它会跳过更新或插入。但是,如果设置了其中之一,则需要添加。所以参数 1 和 2 可以同时设置,既不设置,也可以任意设置。我没有介绍任何一套,而且这两套都有效。
  • 如果设置了一个-应该插入,另一个应该为NULL?我已经回答了,看看是不是想要的,如果不是 - 评论,我会编辑答案。

标签: php pdo insert sql-insert


【解决方案1】:

我在想几个场景,也许以后会编辑答案,如果这里的不是想要的,但既然作者说:

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

似乎应该插入,但是没有设置的值应该发生什么,它通常应该变成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;

【讨论】:

  • 所以这会检查变量中是否有值,如果没有则设置为 NULL 并允许 PDO 查询插入它,跳过缺失的值?
  • 是的,我希望它有效,我认为插入 NULL 值是正常的 PDO。否则,如果符合您的要求,您可以将其设置为“0”。我确定 PDO 可以插入整数呵呵 :)
  • 不走运,如果 $category_of_taxom66 或 $number_of_taxom66 等于它应该插入的值,即使只输入了其中一个。将检查我的错误日志
  • 我可能将它创建为潜在的 3 个插入,如果 X 和 Y 设置插入,否则 X 设置仅插入 X,如果 Y 设置仅插入 Y。但我有 8 更新 8 插入,那么会再添加 16 个插页
  • 尝试设置为 0,而不是 NULL。但是,是的,这就是我所遵循的逻辑。如果 $category... 已设置,但 $number 未设置,它将为类别插入输入,为数字插入 NULL
猜你喜欢
  • 1970-01-01
  • 2021-04-02
  • 1970-01-01
  • 2018-09-24
  • 2013-12-05
  • 2016-10-19
  • 2020-10-18
  • 2021-01-16
  • 1970-01-01
相关资源
最近更新 更多