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