我想在更新/插入之前检查数据库中是否存在某些签名。这是一个两个问题,但却相似。
我就是这样做的。
$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>';
问题 这是我第一次尝试这种方式,我想知道这是否正确?如果这是安全吗?
答案 0 :(得分:1)
根据数据库的不同,您可以使用MERGE
,如果不存在,则插入记录,如果记录不存在则更新 atomically 。
这比你自己做的任何检查都要好,因为这使它成为一个两步的过程。理论上,其他人可以在您的支票和插页之间插入记录,使您的插入失败。
使用预准备语句来阻止SQL注入。你在第一段代码中做到了这一点,为什么不在你的第二段呢?
提示,当包含更新语句时,不要将变量'delete'调用,这会让下一个人感到困惑。
答案 1 :(得分:0)
首先,您需要检查数据库中是否存在该值,这意味着您需要查询该值,然后决定更新或删除。
您还可以在表格中设置唯一键约束,以防止插入重复值。