不能使用预处理语句在MySql中插入链接


Can Not Insert Link into MySql using Prepared Statement

我创建了一个表单,它将数据插入MySQL数据库。这里是表单字段,它们是<form>的一部分,但是,我没有在这里显示整个表单,只是产生问题的字段。

<tr> <td>Top 728x90 As</td><td><textarea name='topad'><?=$r['topad']?></textarea></td</tr>
<tr> <td>Sidebar 250x250 Ad</td><td><textarea name='sidebarad'><?=$r['sidebarad']?></textarea></td></tr>

这部分代码处理输入并将其插入数据库。

if(isset($_POST['submit'])) {
    $topad = $_POST['topad'];
    $sidebarad = $_POST['sidebarad'];
    $update = $connection->prepare("UPDATE site SET topad = '$topad' , sidebarad = '$sidebarad' WHERE id=1");
    $update->execute(array());
}

这个代码的问题是,它不接受/处理涉及<a href="#"> &</a>代码。这不是关于转义HTML字符,因为所有其他HTML标记(如<img>等)都显示原样,这就是我想要的。

所以,每当我插入<a>标签时,它就消失了,它既没有插入到数据库中,也没有在按下提交按钮后显示在表单中。

UPDATE:当使用双引号插入链接时,它被接受。如果我使用单引号,它不会被处理。例如,<a href="someurl">在DB中被接受,而<a href='someurl'>不被接受。

原因是您使用的是预处理语句,但值没有参数化。试一试下面,

$topad = $_POST['topad'];
$sidebarad = $_POST['sidebarad'];
$update = $connection->prepare("UPDATE site SET topad = :topad , sidebarad = :sidebarad WHERE id=1");
$update->execute(array(':topad' => $topad, ':sidebarad' => $sidebarad));
    如何在PHP中防止SQL注入?