Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 如何防止mySql注入_Php_Mysql_Code Injection - Fatal编程技术网

Php 如何防止mySql注入

Php 如何防止mySql注入,php,mysql,code-injection,Php,Mysql,Code Injection,我需要知道如何防止我们的数据库被sql注入,我在互联网上读了很多博客和答案,但无法证明我更喜欢或最好的方式。 就像mysql一样: mysqli: mysql_real_escape_string. 或使用 Using PDO: 我知道,如果用户在数据库中插入某个内容,它就会容易受到SQL注入的攻击,我通常使用以下代码进行插入: <?php $con=mysql_connect("localhost","root",""); $db=mysql_select_db("test",$c

我需要知道如何防止我们的数据库被sql注入,我在互联网上读了很多博客和答案,但无法证明我更喜欢或最好的方式。 就像mysql一样:

 mysqli:
mysql_real_escape_string.
或使用

Using PDO:
我知道,如果用户在数据库中插入某个内容,它就会容易受到SQL注入的攻击,我通常使用以下代码进行插入:

<?php
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$foo=$_POST['foo'];
$boo=$_POST['boo'];

$insert="insert into table set foo='$foo',boo='$boo'";

出于以下几个原因,您应该使用PDO:

1) 它已参数化查询,因此没有sql注入


2) PHP的mysql函数从PHP 5.5.0开始就被贬低了

如果您非常了解下面的代码,那么将其转换为PDO就像:

从SQL代码:

<?php
$con=mysql_connect("localhost","root","");
$db=mysql_select_db("test",$con);
$foo=$_POST['foo'];
$boo=$_POST['boo'];
$insert="insert into table set foo='$foo',boo='$boo'";

通过使用而不是直接查询,您可以防止系统进行sql注入

这可能会对您有所帮助。这个问题被问了很多次“我甚至数不清”。。在google或更好的stackoverflow上快速搜索。使用
PDO
。您将获得内置的安全性。+1是很好的指南,所以首先我要学习PDOimlementation@Jack是的,这是一个非常好的教程,有很多帮助phpNoOb@Jack您也可以在mysql中执行安全查询,但这不是一个好的选择,因为它已被弃用。您可以阅读本文了解更多信息information@NullPointer:描述得真好。非常感谢大家不要担心,总有人可以投票:)是的,我知道,只是这是一个完全合法的回答我们不能说它完全合法。。。我的意思是,你至少可以知道代码中有什么内容…我知道mysql_*已被弃用。。mysql和pdo或mysqli一样安全,这是毫无疑问的。。但最重要的是,它们已经被弃用了,所以你需要处理一堆mysql命令并输入用户提供的数据?那么它有什么坏处呢?你能解释一下你投反对票的原因吗?因为你没有改变任何事情。。。。因此,我将重新键入我在这个小方框中提供的参考的要点?但你应该编写相关部分。我不是DB专家,但我只是分享我所知道的知识。不管怎样,如果你认为我错了,你有权投反对票:)祝你好运
<?php
$con= new PDO('mysql:host=localhost; dbname=xxxx', 'username', 'password')
$stmt = $con->prepare('INSERT INTO Table (foo, boo) VALUES (?,?)');
$stmt->execute(array($_POST['foo'], $_POST['boo']))