在PDO准备语句参数中单引号退出

所以我明白PDO Prepared Statements应该保护SQL注入和逃避。 但是当我尝试以下...

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["id"]))
{   
    $id = $_POST["id"]; 
    //$id = "2' AND name='Entry2";
    $someinfo = "updated";

    ...DB Stuff...

    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $dbpassword);

    $stmt = $conn->prepare("UPDATE testdb SET info=:someinfo WHERE id=:id");

    $stmt->bindParam(':id', $id);
    $stmt->bindParam(':someinfo', $someinfo);
    $stmt->execute();

    $conn = null;

    exit();
}

然后id = 2和name = entry2的行将被更新。 现在看起来这似乎不能用于逃避其他SQL查询,并且我认为我可以采取预防措施以确保这种逃避不会真的造成损害。 但我想确保没有其他方法可以防止'转义对SQL查询参数进行意外更改。 (值得注意的是,我在SQLi中尝试了类似的结果,并得到了几乎相同的结果。)

有什么我失踪? 或者这正是Prepared Statements的工作方式。


在环顾四周之后,这个行为在这里得到了雄辩的解释/解决:https://phpdelusions.net/pdo#comment-277

事实证明,它并没有转义字符串,而是在整数之后截断输入,使整个字符串看起来像字符串一样。 修改代码后,我能够确认这一点。

链接地址: http://www.djcxy.com/p/93801.html

上一篇: Single Quote Escape in PDO Prepared Statement Parameters

下一篇: How prepared statement protect again SQL injection in below statement