使用mysqli正确清理多个用户输入

时间:2013-04-25 07:01:33

标签: php security mysqli bind

我目前正在使用mysqli,我想要一种方法来正确清理每一个用户输入。我正在寻找最简单的轻量级方法,因为据我所知,我不应该使用mysql_real_escape ....

我的查询是这样的

$stmt = $sql->prepare("INSERT INTO Persons (msg, ip, time, main, twit, city, lat, lon, lang)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");

据我了解我应该使用函数bindParam ...如果我这样使用它,我是否完全保护我的用户输入?

$stmt->bind_param('sssssssss', $_POST[msg], ('$ip'), ('$date'), '$_POST[main]', '$_POST[twit]',  ('$cit'), ('$lat'), ('$lon'), '$_POST[lang]');
$stmt->execute();
$stmt->close();

如果这不能保护我的用户输入,我该怎么做呢?

2 个答案:

答案 0 :(得分:4)

您需要准备声明以确保安全。像下面的东西(它可能不是100%,但给你一个想法)

 $sql = new mysqli("localhost", "my_user", "my_password", "world");


    $stmt = $sql->prepare("INSERT INTO Persons (msg, ip, time, main, twit, city, lat, lon, lang)
        VALUES
        (?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->bind_param("sssssssss",$_POST[msg], $ip, $date, $_POST[main], $_POST[twit],  $cit, $lat, $lon, $_POST[lang]);
    $stmt->execute();

答案 1 :(得分:0)

首先,您必须遵循基本的 PHP语法

'$_POST[msg]'将作为文字$_POST[msg]字符串插入,而您期望$ _POST ['msg']变量的