PHP MySQL插入查询无变量

时间:2018-11-22 14:51:49

标签: php mysql

我一直写2个函数,例如,一个用于插入,一个用于编辑

添加:

function add_bank($vars = array()) {
    $sql = "INSERT INTO BANK (Name, Var1, Var2, ...., Var7) VALUES (?, ?, ?, ..., ?)";

    $name = isset($vars[Name]) ? $vars[Name] : "";

    ...

    $var7= isset($vars[Var7]) ? $vars[Var7] : "";

    $rs = $db->prepare($sql);
    $rs->execute(array($name, ..., $var7));
    $id = $db->lastInsertId();
    return $id;
}

编辑:

function edit_bank($idBank, $vars = array()) {

    $sql = "UPDATE BANK SET ";
    $v = array();   

    if ( isset($vars['Name']) ) {
        $sql .= "Name = ?, ";
        $v[] = $vars['Name'];
    }
    ...
        ..
    if ( isset($vars['Var7']) ) {
        $sql .= "Var7= ?, ";
        $v[] = $vars['Var7'];
    }

    $sql = rtrim($sql, ", ");
    $sql .= " WHERE ID = ?";
    $v[] = $idBank;

    $rs = $db->prepare($sql);
    $rs->execute($v);
}

现在,每次我需要向表中添加新字段时,我总是要编辑这两个函数...

我想减少问题,仅编辑edit_bank函数并保留add_bank函数。

我正在考虑这样的解决方案:

function add_bank($vars = array()) {

    $sql = "INSERT INTO BANK";

    $rs = $db->prepare($sql);
    $rs->execute();
    $id = $db->lastInsertId();

    edit_bank($id, $vars);

    return $id;
}

但似乎查询:$sql = "INSERT INTO BANK";无效。有解决办法吗?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您只想插入一个空行,请从自动增量列获取新的ID,然后使用所需的数据对其进行更新。我在某些情况下亲自使用过此方法,但看不到任何问题。

您可以插入具有所有默认值的新行,如下所示:

INSERT INTO BANK () VALUES();

或者,如果ID是自动递增(看起来是这样),则可以执行以下操作:

INSERT INTO BANK SET ID = NULL;

为此,请注意,所有列都必须具有默认值,或者需要确保关闭STRICT_TRANS_TABLES,否则可能会出错。

现在,您应该有一个新的ID,并且有一个空行要编辑。

答案 1 :(得分:0)

您可能想看看replace into

  

REPLACE的工作原理与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除该旧行。请参见第12.2.5节“ INSERT语法”。

这样,您可以创建查询,例如:

$sql = "INSERT INTO BANK (Id, Name, Var1, Var2, ...., Var7) VALUES (?, ?, ?, ..., ?)";
if (NEED_TO_EDIT) {
    $Id = $idBank;
} else {
    $Id = null;
}

$rs = $db->prepare($sql);
...

请注意,这不是ansi sql标准。

相关问题