Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插入/更新并避免sql注入_Php_Sql_Security_Sql Injection - Fatal编程技术网

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之前以及运行更新时避免这种情况。希望这是有道理的