0

こんにちは、挿入ステートメントと更新ステートメントがあります。更新は正常に機能します。category_of_taxom と number_of_taxom の 2 つのフィールドがあります。更新により、いずれかを変更でき、レコードが更新されます。

ただし、ほとんど同じ挿入は、まだ存在しない場合はレコードを作成します。両方のオプションに値を入力すると機能しますが、一方だけを入力すると何も送信されませんか? コードは非常に複雑で、すべての変数名がありますが、別の if ステートメントか何かが必要になると思いますか? 1つだけが入力されているかどうかを確認するには? それとも、これはすべてのパラメータに入力が必要な 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!";        
   }
            }   
4

1 に答える 1

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();

そのため、ユーザーが category_taxom に "100" を入力したが、number_taxom が入力されていない場合、次のようになります。

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

もう 1 つの方法は、最初の例で「NULL」の代わりに「0」を使用することです。

         $category_of_taxom66 = isset($_POST['categorySelect6fromDB']) ? $_POST['categorySelect6fromDB'] : 0;
         $number_of_taxom66 = isset($_POST['number_of_taxom6']) ? $_POST['number_of_taxom6'] : 0;
于 2013-08-09T13:17:08.827 に答える