- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 MySqli real_escape_string 准备一些文本以包含在 SQL 查询中,但就目前情况来看,real_escape_string 似乎不能很好地处理撇号。我在下面添加了一些测试代码:
function validMySQLtest($var) {
$conn= connopen();
conncheck();
$var = str_replace("£", "£", "$var");
$var = str_replace("'", "\'", "$var");
$var=htmlentities($var, ENT_QUOTES, "UTF-8");
echo "Entities " . $var . "<br />";
$var=stripslashes($var);
echo "Stripslashes " . $var . "<br />";
$var=strip_tags($var);
echo "Striptags " . $var . "<br />";
$var = $conn->real_escape_string($var);
echo "Escape String " . $var . "<br />";
connclose();
return $var;
}
validMySQLtest("In medieval times Germany produced most of the world's brass.");
代码输出如下;
Connected successfully....
Entities In medieval times Germany produced most of the world\'s brass.
Stripslashes In medieval times Germany produced most of the world's brass.
Striptags In medieval times Germany produced most of the world's brass.
Escape String In medieval times Germany produced most of the world's brass.
....Connection closed.
据此我发现 str_replace、stripslashes 和 striptags 似乎可以工作,但 real_escape_string 似乎不起作用。
任何想法将不胜感激。
编辑:为了回应评论,我添加了 connopen 和 conncheck 代码:
// Open connection
function connopen() {
$conn = new mysqli(servername, username, password, dbname);
return $conn;
}
//Check connection
function conncheck() {
$conn = connopen();
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo "Connected successfully....<br /><br />";
}
}
最佳答案
技术上正确的答案可能是一个更好的通用文本处理例程,这对编写来说有点挑战,并且可能会让您陷入神秘的细节中,尤其是当您开始处理字符集的模糊性时 - 并且如果您的程序要安全,通常您确实需要这样做,或者更好地避免使用准备好的语句(如上面 tadman 所建议的那样)。
但是,如果您只是想要一种快速而肮脏但简单有效的方法来处理特别是单引号字符,那么这样的方法是有效的。
$var = htmlspecialchars(str_replace("'", "’", $v), ENT_QUOTES, 'ISO-8859-1');
请注意,我们正在替换单引号字符,它不是撇号。从打印上来说,“Sean O'Mara”或“world's Brass”中使用的正确字符是撇号,它在视觉上与单引号 (rsqo) 非常相似,因此从语言角度来看,我们在这里做的是正确的事情。有时这确实是正确的答案,特别是当您希望输出的打印正确时。例如,将大段文本(错误地)输入为“Sean O'Mara”,并用真正的撇号全局替换单引号(这更容易键入)要容易得多。哦,真正的撇号也不会混淆您的数据库,它只是另一个字符,例如“p”或“W”。
关于PHP mySQLi real_escape_string 不适用于撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31142368/
我收到这个错误: Call to a member function real_escape_string() on a non-object 这里是 $db $db = new mysqli("12
就速度和安全性而言,是否有理由使用其中一种?谢谢! 最佳答案 速度: 当您使用绑定(bind)参数时,您可以重复使用相同的查询和查询计划,只需更改参数即可。当您从字符串构建查询时,数据库必须重新解析该
我认为在将来自 HTML 表单的传入数据输入到 mySQL 数据库之前“清理”传入数据的正确方法是在 PHP 脚本中对其使用 real_escape_string,像这样: $newsStoryHea
我希望能够添加和更新某些信息。现在一切正常,直到我发现当发送到数据库的文本中有引号时脚本不再起作用。 所以我做了一些研究,发现我必须使用 mysql_real_escape_string() 函数来忽
strip 斜线()?那太蹩脚了,所以 4.0。 mysqli::real_escape_string 的 5.0 对应项是什么,它去除了为 SQL 查询添加的所有斜线? 还有其他问题: 尝试更新记录
我正在尝试使用 MySqli real_escape_string 准备一些文本以包含在 SQL 查询中,但就目前情况来看,real_escape_string 似乎不能很好地处理撇号。我在下面添加了
我正在学习 PHP 的书说,为了防止人们使用引号之类的东西来更改查询,您应该使用 real_escape_string 函数。作者接着说,在一些启用了魔术引号的旧系统上,使用 real_escape_
我正在尝试使用 mysql_real_escape_string() 来保护登录表单。 使用这段代码: include_once 'access-shared.php'; include_once '
同时,我在 PHP.net#mysqli_real_escape_string 中阅读有关 mysqli->real_escape_string 的内容.几行,我不明白它们的意思,以及使用 real_
是否可以转义整个查询而不是每个搜索字段。例如,我知道我可以这样做: $name="O'Connor"; $email="mark.O'Connor@something.com"; $name=mysq
我已经尝试了针对有关此主题的其他问题发布的所有解决方案,但没有一个有效。 如果这是一个基本问题,我很抱歉,但我是 MySQLi 的新手,我不知道为什么这个连接不起作用。 我的 functions.ph
我不想受到 sql 注入(inject)的攻击。谁能告诉我我在这里是否正确使用 $mysqli->real_escape_string?目前我只在 $name 变量上使用它。我对 PHP 和数据库没有
这个问题已经有答案了: Are mysql_real_escape_string() and mysql_escape_string() sufficient for app security? (5
我有这个 PHP 代码: $ua = $mysqli->real_escape_string($_SERVER['HTTP_USER_AGENT']); $mysqli->query("INSERT
我有一个小问题。我已经编写了这段代码来将值添加到 mysql 数据库,但是当我运行代码时出现错误。谁能帮帮我? 代码: $fel = $mysqli->query("INSERT INTO delet
我有两个类如下: class-1: connection_class.php class connection{ public $connection; function __construct(){
我已经尝试了针对有关此主题的其他问题发布的所有解决方案,但没有一个有效。 如果这是一个基本问题,我很抱歉,但我是 MySQLi 的新手,我不知道为什么这个连接不起作用。 我的 functions.ph
我编写了一个不错的管理界面,其中包括库存管理、内容管理和博客。现在是时候将其锁定并确保其安全(是的,我应该从一开始就这样做...... 对于博客创建/编辑,我使用的是将 HTML 输出发布到 edit
这个问题在这里已经有了答案: How can I prevent SQL injection in PHP? (27 个答案) 关闭 9 年前。 prepare() 对于我的大部分代码来说似乎有点乏
我正在开发 Dreamviewer。当我尝试编写基本语法时,它通常会自动完成。 如您所见,它为“转义”提供了 2 种变体:real_escape_string 和 escape_string。我想知道
我是一名优秀的程序员,十分优秀!