Php 何时使用mysql真实转义字符串

Php 何时使用mysql真实转义字符串,php,mysql-real-escape-string,Php,Mysql Real Escape String,我完全糊涂了,我读过一些帖子,但仍然不确定。我不想走事先准备好的声明路线,因为这个网站只在我们的内部网上。我读过以下帖子,但我还是不确定 我的问题:我应该使用mysql真正的转义字符串吗 当只有我从表单或 关于我所有的疑问?例如:SELECT*FROM…… 例如,在它的状态中:您需要在使用字符串文本构建SQL查询时调用此函数。您不应该在其他任何地方调用它。当您不确定字符串中包含的内容时,这一点很重要。 这意味着用户输入 您可能还想考虑用.< /P> < P>移动到准备好的语句:我实际使用它:

我完全糊涂了,我读过一些帖子,但仍然不确定。我不想走事先准备好的声明路线,因为这个网站只在我们的内部网上。我读过以下帖子,但我还是不确定

  • 我的问题:我应该使用mysql真正的转义字符串吗

  • 当只有我从表单或
  • 关于我所有的疑问?例如:
    SELECT*FROM……

  • 例如,在它的状态中:
    您需要在使用字符串文本构建SQL查询时调用此函数。您不应该在其他任何地方调用它。

    当您不确定字符串中包含的内容时,这一点很重要。 这意味着用户输入


    您可能还想考虑用.< /P> < P>移动到准备好的语句:我实际使用它:

    我将要放入MySQL查询中的任何变量,如果它是直接用户输入(通过表单),或者是我通过
    GET requests
    传递的参数,那么它可能已经被用户修改过


    你明白我的意思了…:-)

    预处理语句的作用(除其他外)是调用类似于mysql\u real\u escape\u string()的方法
    如果您不使用PDO,那没关系,您必须了解自己在做什么,这样您将获得相同的安全级别。
    唯一简单的规则是
    所有原始数据都需要mysql\u real\u escape\u string()
    (或其他语言的类似版本)
    例如:
    -来自用户输入的数据
    -您在DB上存储的原始数据(witch是最好的方法)以及您在新sql语句上使用的数据
    -来自未知/其他来源的数据
    详情如下:

    -请确保不要应用两次(以正确保存数据)

    您应该在SQL查询中插入的任何变量上使用它


    所有不是文本字符串的内容都应该被清理。不管你是从表格、数据库还是其他任何地方得到的,如果它不是常数,那么你应该对它进行清理。

    你问题中引用的句子是正确的。
    所有其他答案都是错误的

    每次向SQL查询添加带引号的字符串时,都必须对其进行转义。
    这是您必须使用mysql\u real\u escape\u string()的唯一情况

    附言:我不敢相信这个问题还有它的答案


    Stackoverflow是一个非常奇怪的地方。

    这应该是一篇帖子上的评论。使用预处理语句的可能重复实际上并不比使用“旧”方法更难或更耗时,通常情况下恰恰相反。我会把任何内联网软件都当作互联网来对待——这很简单,因为有时候你会被解雇,或者被解雇的员工犯了错误。你真的应该重新考虑准备好的声明(PDO或Mysqli)。MySQL已经被这些更好的替代品所取代,即使在本地intranet应用程序中也要开始使用MySQL,这是一个好习惯,因为在现实世界中,您应该始终使用最新的库。试着想想这个函数实际上做了什么,为什么我真的无法理解您的存在。。。对我的方法持否定态度;是的,我知道它的作用…你不知道。我不是反对你的方法,而是反对它得到的选票。@你的常识是,SQL代码注入是一个安全问题吗?mysql\u real\u escape\u字符串是防止SQL代码注入的一种方法吗?请问,为什么mysql\u real\u escape\u string与安全性毫无关系?@Luis SQL代码注入存在安全问题,但此函数与此无关。因为它是字符串格式化函数,而不是SQL注入预防函数。它的名字里没有“注射”这个词。它用于格式化字符串。不管字符串是什么,不仅仅是恶意字符串。另一方面,它对于SQL查询的任何其他部分都是完全无用的。好吧,如果我理解corect:1)来自用户表单的输入=是。2) 选择*from usrs,其中username='$user'=不必要,因为我已经转义了用户输入。3) .. 而($row=mysql\u fetch\u assoc($result)){$userid=$row['id'];$departmentid=$row['dept'];}=不是必需的,因为它是表中的信息?4) $str=“Nike的…”=是我的答案中没有“输入”或“用户”两个词。因此,您理解错了。在您的示例中,只有$name,因为您将它插入到SQL查询中的引号中,所以SQL将其视为字符串。mysql\u real\u escape\u string确实将您的数据格式化为适合SQL字符串的格式。您在这里分门别类。程序员如何首先知道用户何时会引用,何时不会引用?@itachi您正在向谁讲话?对你来说,什么东西看起来像是在吹毛求疵?如果我给你看一个简单的代码,你会删除它吗?尽管按照你的回答说明,它会允许注射?一个非常误导的答案。mysql_real_escape如何比pdo提供更多的安全性?pdo的概念是分别发送sql和数据。人们应该鼓励新手使用pdo。。。。这就是为什么所有php教程、书籍都包含易受攻击的代码的原因。正如您的常识和itachi所指出的,这是一个错误的答案。完全
    mysql.*
    函数已经过时,而且不安全。使用或而不是使用准备好的语句,它们比
    mysql\u real\u escape\u string()
    安全得多。