当前位置: 首页 > 面试题库 >

如果绑定参数,是否必须使用mysql_real_escape_string?

秦凯旋
2023-03-14
问题内容

我有以下代码:

function dbPublish($status)
{
 global $dbcon, $dbtable;

 if(isset($_GET['itemId']))
 {
  $sqlQuery = 'UPDATE ' . $dbtable . ' SET active = ? WHERE id = ?';
  $stmt = $dbcon->prepare($sqlQuery);
  $stmt->bind_param('ii', $status, $_GET['itemId']);
  $stmt->execute();
  $stmt->close();
 }
}

在这种情况下,我需要mysql_real_escape_string还是可以吗?


问题答案:

不,在使用准备好的语句时,您不必自己逃避价值 (即,您不需要调用mysqli_real_escape_string:DB引擎将自己执行该操作。

(实际上,如果您正在调用mysql_real_escape_string并使用绑定参数,则您的字符串将被转义两次-
并不是很好:您最终会到处转义字符…)

附带说明:您的值以整数形式传递
(如所示'ii',因此mysql_real_escape_string即使您未使用准备好的语句,也不必调用:顾名思义,此函数用于转义…字符串。

对于整数,我通常只是intval用来确保我注入到SQL查询中的数据确实是整数。

(但是,当您使用准备好的查询时,您不必再进行这种转义)



 类似资料:
  • Gson用户指南指出,我们应该为任何类定义默认的无参数构造函数,以便正确使用Gson。更重要的是,在Gson的类的javadoc中说,如果我们试图反序列化缺少默认构造函数的类的实例,将引发异常,在这种情况下,我们应该使用。然而,我已经尝试在缺少默认构造函数的类中测试使用Gson,并且序列化和反序列化都可以顺利工作。 下面是反序列化的一段代码。没有非参数构造函数的类: 还有一个测试: 这很好用。 所

  • 问题内容: Gson用户指南指出,我们应该为任何可以正常使用Gson的类定义默认的无参数构造函数。甚至,在Gson 类的javadoc中说,如果我们尝试对缺少默认构造函数的类实例进行反序列化,则会抛出异常,在这种情况下 应 使用该异常。但是,我尝试对缺少默认构造函数的类使用Gson进行测试,并且序列化和反序列化工作都没有任何麻烦。 这是反序列化的代码。没有非参数构造函数的类: 和一个测试: 效果很

  • 问题内容: Gson用户指南指出,我们应该为任何可以正常使用Gson的类定义默认的无参数构造函数。更重要的是,在Gson 类的javadoc中说,如果我们尝试对缺少默认构造函数的类实例进行反序列化,则会抛出异常,并且在这种情况下应使用该异常。但是,我尝试对缺少默认构造函数的类使用Gson进行测试,并且序列化和反序列化工作都没有任何麻烦。 这是反序列化的代码。没有非参数构造函数的类: 和一个测试:

  • 问题内容: 我知道您绝不应该信任表单中的用户输入,主要是因为有注入SQL的机会。 但是,这是否也适用于唯一输入来自下拉菜单的表单(请参见下文)? 我将其保存到一个Session中,然后在整个站点中使用它来查询各种数据库(使用Select查询),任何SQL注入肯定会损害(可能会删除)它们。 没有类型输入的用户输入可以查询数据库的区域,只有下拉列表。 问题答案: 您可以像以下示例一样简单地进行操作,以

  • 我理解,您永远不应该信任表单中的用户输入,这主要是由于SQL注入的可能性。 然而,这是否也适用于唯一输入来自下拉列表(见下文)的表单? 我保存的到一个会话,然后使用整个网站查询各种数据库(与选择查询)和任何SQL注入肯定会伤害(可能下降)他们。 没有用于查询数据库的键入用户输入区域,只有下拉列表。

  • 问题内容: 我正在使用以下命令运行远程命令: 现在,我想获取输出。我看过这样的事情: 但这有时似乎永远不会运行(即使应该在stdout上有数据)。对我而言,这似乎意味着stdout.channel.exit_status_ready()为True时,stdout.channel.recv_ready()不一定已经准备好(正确)。 这样合适吗? 也就是说,在等待说数据准备就绪之前,我真的必须首先检查