Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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_Mysql - Fatal编程技术网

Php 如何从输入中保护SQL查询?

Php 如何从输入中保护SQL查询?,php,mysql,Php,Mysql,如何从输入中保护SQL查询 我将参数发布到php中的一个页面&然后我必须将其插入数据库,但我不知道如何保护输入参数 <?php $con=mysqli_connect("example.com","peter","abc123","my_db"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } mys

如何从输入中保护SQL查询

我将参数发布到php中的一个页面&然后我必须将其插入数据库,但我不知道如何保护输入参数

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age)
VALUES ($_POST['FirstName'], $_POST['LastName'],$_POST['Age'])");


mysqli_close($con);
?>

您需要做多件事。首先,为什么要使用常用的MYSQL方法?您应该使用PDO对象

然后可以使用prepare()方法,然后将其作为数组插入


请检查通过预先转义这些字符串,您可以轻松地使用
mysqli
函数集完成此操作。MySQL PHP驱动程序包含一个函数,用于安全地转义字符串以插入字符串->
mysqli\u real\u escape\u string

这会将您的查询更改为:

mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age) VALUES ('" . mysqli_real_escape_string($_POST['FirstName']) . "', '" . mysqli_real_escape_string($_POST['LastName']) . "', '" . mysqli_real_escape_string($_POST['Age']) . "')");
这将解决您对SQL输入安全性的大部分担忧

可选

通过使用准备好的语句,充分利用其他类型和更安全查询的驱动程序转义,您也可以使用
mysqli
这样做:

// Prepare our query
$stmt = mysqli_prepare($con, "INSERT INTO Persons (FirstName, LastName, Age) VALUES (?, ?, ?)");

// Bind params to statement
mysqli_stmt_bind_param($stmt, "ssi", $_POST["FirstName"], $_POST["LastName"], $_POST["Age"]);

// Execute the query
mysqli_stmt_execute($stmt);

最好的方法是使用CodeIgniter、Kohana、Zend等框架。。。 它已经内置了安全类。 如果你不想使用这些框架,你可以选择这些类

另一种方法,你可以使用ORM。 你可以用红豆
如果涉及用户输入,那么使用参数化查询以避免SQL注入。这可能是一个复制品。看一看,这可能是最好的东西,这不一定是一个实用的答案-我认为这更多的是一个评论。你可以使用
prepare
mysqli
-为什么他必须切换到PDO并放弃这种方法?PDO是一种安全的方法,你可以更有效地控制和更安全。如果你想了解更多的原因,那么请看我对阅读教程不感兴趣,如果你建议换成PDO,你应该解释原因-他问了怎么做,很可能想坚持目前的设置。为什么他需要研究你的链接?PDO比mysql稍慢一点,但它有很好的可移植性。PDO提供跨多个数据库的单一接口。这意味着您可以使用多个DB,而无需使用mysql的mysql\u查询、mssql的mssql\u查询等。只需始终使用类似$DB->query(“插入…”)的内容即可。无论您使用的是什么DB驱动程序。因此,对于较大或可移植的项目,PDO更可取。甚至zend框架也使用PDO。对你来说足够好了,伊苏里尔?->我没有问这个问题,我只是给了你一些建议来提高你答案的质量。不管你怎么想,发布链接并不是很有帮助。查看MetaStackOverflow上的第一个答案以了解更多信息。我使用mysqli\u real\u escape\u字符串,但不使用时间outing@user2522767
mysqli\u real\u escape\u string
很可能不是罪魁祸首,而是您在代码文件中正在做的其他事情。