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

时间:2013-11-17 06:47:56

标签: 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();
}

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


mysqli_close($con);
?>

3 个答案:

答案 0 :(得分:1)

您可以通过预先转义这些字符串,使用mysqli函数集轻松完成此操作。 MySQL PHP驱动程序包含一个安全地转义字符串以插入字符串的函数 - &gt; mysqli_real_escape_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);

答案 1 :(得分:0)

你需要做很多事情。首先,为什么使用通常的MYSQL方法?您应该使用PDO对象。 http://php.net/manual/en/book.pdo.php

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

请检查http://php.net/manual/en/pdo.prepared-statements.php

答案 2 :(得分:0)

你要做的最好的事情是使用像CodeIgniter,Kohana,Zend这样的框架...... 已经内置了安全类。 如果您不想使用这些框架,您可以参加这些课程。

另一种方式,你可以使用ORM。 你可以使用redbean http://www.redbeanphp.com/ 我用过的最好最简单的ORM