我已经尝试了一切,我仍然无法弄明白. addslahes(),str_replace(),htmlentities(),我只是无法理解为什么双引号没有显示在我的网站上.
$sql = $con->prepare("SELECT * FROM `user_settings` WHERE `user_session` = '$user_session'");
$sql -> execute();
$result = $sql->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
$advertising_1 = $row['advertising_1'];
$advertising_2 = $row['advertising_2'];
$website_name = $row['website_name'];
$website_url = $row['website_url'];
$statistics = $row['statistics'];
}
echo '' ?>
有人可以解释一下我在哪里出错吗?问题出现在我的字符串中的双引号.单引号用mysql_escape修复,但似乎已弃用.
解决方法:
您需要将输出的数据转义为使用htmlspecialchars的浏览器并使用引号常量(ENT_QUOTES),以便将所有引号转换为实体.请注意,这也是如何防止/执行XSS注射.元素/属性在不是假设的时候关闭,然后写入恶意代码.
echo htmlspecialchars('Encode all of these "test" test \'test \'', ENT_QUOTES);
输出:
Encode all of these "test" test 'test '
并在浏览器中:
Encode all of these “test” test ‘test ‘
同样从您显示的代码中,您滥用准备好的语句.值必须绑定,而不是与查询连接.这样PDO驱动程序将处理引用/转义.如果您继续使用它,这可能会在将来导致类似的问题.还可以打开SQL注入.
标签:php,pdo
来源: https://codeday.me/bug/20190627/1309117.html