首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql_real_escape() w/ trim() w/ stripslashes() -这是合理的吗?

mysql_real_escape() w/ trim() w/ stripslashes() -这是合理的吗?
EN

Stack Overflow用户
提问于 2011-03-16 09:29:30
回答 3查看 1.8K关注 0票数 2

这可能是一个非常愚蠢和不言而喻的问题:我正在像这样剥离我的提交(但需要提交到我的表中,并将数据回显到屏幕上):

代码语言:javascript
复制
$num_of_badges = stripslashes(trim(mysql_real_escape_string($_POST['num_of_badges'])));

当然,数据是传递的,但是stripslashes()``** here defeat the purpose ofmysql_real_escape()`呢?

所以: Bill's变成了桌子上的Bill,并在屏幕上回响。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-16 10:12:35

需要提交到我的表,并将数据回显到屏幕上

这句话是你所有问题的关键。

虽然trim()conditional stripslashes()是“提交”相关的,但mysql_real_escape_string是完全不同的事情,它与提交、输入、输出等无关。它只与SQL查询有关。

因此,这些功能永远不应该混合在一起。

  • 条带斜杠应该是有条件的。如果启用了魔术引号,则仅使用。可以用get_magic_quotes_gpc()检查。仅适用于HTTP输入变量。
  • trim大部分时间都很没用,但就这样吧,把它应用到输入上吧。

上面这两个可以在你的代码顶部盲目地使用。但是第三个,

正如已经说过的,

  • mysql_real_escape_string,是完全不同的事情,它应该用在将要插入到中的字符串上。而不是要在屏幕上回显的字符串。不是数字或标识符,而是进入查询的字符串(带引号的数据块)。因此,mysql_real_escape_string可以在构建查询之前使用,而不能在其他地方使用。并且应该是在将数据插入到查询中之前对数据执行的最后一个操作。

另外,我也希望你不会在将数据插入数据库后立即打印出来。你宁愿做一个重定向,然后从数据库中读回你新写的数据。

票数 0
EN

Stack Overflow用户

发布于 2011-03-16 09:34:09

或者,您可以使用prepared statements而不损坏您的数据:

代码语言:javascript
复制
<?php
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) {
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
?>
票数 5
EN

Stack Overflow用户

发布于 2011-03-16 09:35:58

这里的答案很简单,那就是条带化实际上是在绕过mysql_real_escape_string。

代码语言:javascript
复制
$num_of_badges = trim(stripslashes($_Post['num_of_badges']));
$query_part = mysql_real_escape_string($_Post['num_of_badges']); // Or whatever...

这可能是你必须要做的,记住你不需要总是超级简洁。一行一行。:P

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5320027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档