Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法使用Prepared语句将链接插入MySql_Php_Mysql_Sql_Html - Fatal编程技术网

Php 无法使用Prepared语句将链接插入MySql

Php 无法使用Prepared语句将链接插入MySql,php,mysql,sql,html,Php,Mysql,Sql,Html,我创建了一个表单,将数据插入MySQL数据库。这里是表单字段,它们是的一部分,但是,我没有在这里显示整个表单,只是出现问题的字段 <tr> <td>Top 728x90 As</td><td><textarea name='topad'><?=$r['topad']?></textarea></td</tr> <tr> <td>Sidebar 250x250 Ad<

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

<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>
此代码的问题是,它不接受/处理涉及
代码的部分数据。这与转义HTML字符无关,因为所有其他HTML标记(如
)都按原样显示,这正是我想要的

因此,每当我插入和
标记时,它就会消失,既不会被插入数据库,也不会在按下提交按钮后显示在表单中

更新:当使用双引号插入链接时,它将被接受。如果我使用单引号,它不会被处理。例如,
将在数据库中被接受,而
将不被接受


为什么会发生此错误?

原因是您使用的是prepared语句,但这些值没有参数化。试试下面

$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));

这是因为您使用了错误的方法来替换变量。您应该使用
占位符
并绑定参数。为什么准备时没有占位符。这与任何未初始化的查询一样容易受到SQL注入的攻击。在尝试处理数据库之前,请先阅读:)如何在更新数据库时使用bind param?如何准备占位符?谢谢。成功了。我曾经认为,仅仅使用prepared语句就足以防止SQL注入。别再这样想了:)
$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));