Php 插入/更新并避免sql注入
在更新/插入之前,我想检查数据库中是否存在某些内容。这是一个二合一的问题,但很相似 我就是这样做的Php 插入/更新并避免sql注入,php,sql,security,sql-injection,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= :Ye
$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>';
$p->main.='';
$statement=$conn->prepare(“选择年、月、名称表,其中MLOV\U年=:年
月份=月份,名称=:名称“);
$bind=数组(
“年”=>$year,
“月”=>$month,
“name”=>$name
);
$statement->tyu_exec_sql_bind($conn,$statement,$bind);
if(false==$statement->fetch()){
//我将在这里运行insert语句。
}
$p->main.='';
$p->main.='';
问题
这是我第一次尝试这种方式,我想知道这是否正确?如果这是安全的话 首先需要检查数据库中是否存在该值,这意味着您需要查询该值,然后做出更新或删除的决定
您还可以在表中设置唯一的键约束,以防止插入重复值。根据数据库的不同,您可能可以使用
合并
,这正好可以做到这一点,如果不存在记录,则插入记录,如果存在记录,则进行更新,原子化
这比您自己做的任何检查都更可取,因为这使其成为一个两步过程。理论上,其他人可能会将记录插入您的支票和插入之间,使您的插入失败
使用准备好的语句来防止SQL注入。你在第一段代码中就这么做了,为什么不在第二段代码中呢
还有一个提示,当变量包含update语句时,不要调用“delete”,这会使下一位阅读此语句的人感到困惑。使用准备好的语句和PDO@perdeu这是我多年来通常使用的代码,但我编写的这段代码是由连接到oracle数据库的其他人完成的,其工作原理与mysqli类似。我试图避免有人尝试使用sql注入。将this=>和this=>标记为书签,您使用哪种数据库库?“$statement”是什么对象?根据所使用的库的不同,绑定的范围可以从任何内容到仅插入变量(不安全)到筛选和映射类型(安全)。对于MySQL,请参阅示例。@SQB。我正试图阻止sql注入,因为“
”。“
据我所知,有人可以运行sql注入。我希望在运行insert语句的check insert之前以及运行更新时避免这种情况。希望这是有道理的