我有以下代码:
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()不一定已经准备好(正确)。 这样合适吗? 也就是说,在等待说数据准备就绪之前,我真的必须首先检查