插入/更新,也避免了SQL注入

时间:2013-11-06 11:35:59

标签: php sql security sql-injection

我想在更新/插入之前检查数据库中是否存在某些签名。这是一个两个问题,但却相似。

我就是这样做的。

$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>';

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

2 个答案:

答案 0 :(得分:1)

根据数据库的不同,您可以使用MERGE,如果不存在,则插入记录,如果记录不存在则更新 atomically

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


使用预准备语句来阻止SQL注入。你在第一段代码中做到了这一点,为什么不在你的第二段呢?

提示,当包含更新语句时,不要将变量'delete'调用,这会让下一个人感到困惑。

答案 1 :(得分:0)

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

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