0

我想在更新/插入之前检查数据库中是否存在某些东西。这是一个二合一但相似的问题。

我就是这样做的。

$p->main .= '<td><input type="text" name="value"  id="value"  size="12" maxlength="50" />';

    $statement = $conn->prepare("SELECT year, month, name table_test WHERE MLOV_year= :Year 
                 AND month= month AND name= :name");

                $bind = array(
                                'year' => $year,
                                'month'   = > $month,
                'name' = > $name
                );


                $statement->tyu_exec_sql_bind($conn,$statement, $bind );

                 if ( false === $statement->fetch()) {
                               // I will run an insert statement here.
                }



    $p->main .= '</td>';
    $p->main .= '</tr>';

问题 这是我第一次尝试这种方式,我想知道这是否正确?如果那是安全吗?

4

2 回答 2

1

根据数据库,您可能可以使用MERGE,这正是这样做的,如果记录不存在则插入记录,如果存在则更新它,原子地

这比您自己做的任何检查都好,因为这使它成为一个两步过程。理论上,其他人可以在您的支票和您的插入之间插入记录,从而使您的插入失败。


使用准备好的语句来防止 SQL 注入。你在你的第一个代码中做到了,为什么不在你的第二个代码中呢?

还有一个提示,当变量包含更新语句时,不要将其称为“删除”,这会使下一个阅读此内容的人感到困惑。

于 2013-11-06T11:46:28.547 回答
0

首先您需要检查该值是否存在于数据库中,这意味着您需要查询它,然后做出更新或删除的决定。

您还可以在表中设置唯一键约束,以防止插入重复值。

于 2013-11-06T11:40:33.060 回答