我想
在更新/插入之前检查数据库中是否存在某些内容。这是一个合二为一但相似的问题。
我就是这样做的。
$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>';
问题这是我第一次尝试这种方式,我想知道这是否正确?如果这是安全性?
根据数据库的不同,您可以使用 MERGE
,它正是这样做的,如果记录不存在,则插入记录,如果存在,则以原子方式更新它。
这适用于您自己进行的任何检查,因为这使其成为一个两步过程。理论上,其他人可能会在您的支票和插入之间插入记录,从而使您的插入失败。
使用预准备语句来防止 SQL 注入。你在第一段代码中做到了这一点,为什么不在第二段代码中做到了呢?
还有一个提示,当你的变量包含更新语句时,不要称它为"delete",这会让下一个阅读此内容的人感到困惑。
首先,您需要检查数据库中是否存在该值,这意味着您需要查询它,然后做出更新或删除的决定。
您还可以在表中设置唯一键约束,以防止插入重复值。