是否足以在PHP中使用mysqli来防止SQL注入?

时间:2013-02-12 16:56:47

标签: mysql mysqli

例如我使用

$building_name = $_POST['BuildingName'];
$metering_type = $_POST['MeteringType'];
$query = "INSERT INTO buildings (BuildingName, MeteringType)
                       VALUES ('$building_name', '$metering_type')";
if(mysqli_query($link, $query))
{
    echo json_encode(Array("success"=>true));
}

我相信这可以防止我进行SQL注入。我安全吗?

2 个答案:

答案 0 :(得分:5)

不,这丝毫不能保护你。

您需要使用MySQLi's parameterized queries via prepare

答案 1 :(得分:2)

在许多情况下,即使是准备好的陈述也不够或极其辛苦 例如,您无法准备标识符。

因此,最好使用一些智能库而不是原始API,以使您的代码 安全且简短:

$sql = "INSERT INTO buildings (BuildingName, MeteringType) VALUES (?s, ?s)";
$res = $db->mysqli_query($sql, $_POST['BuildingName'], $_POST['MeteringType']);
if(res)
{
    echo json_encode(Array("success"=>true));
}

但如果你仍然想坚持使用原始API - 最好选择PDO而不是mysqli。它会为你节省大量的麻烦。