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

使用准备好的语句时,是否需要mysql_real_escape_string()?

贺恩
2023-03-14
问题内容

对于此查询,有必要使用mysql_real_escape_string吗?

任何改进或查询是否还好?

$consulta = $_REQUEST["term"]."%";

($sql = $db->prepare('select location from location_job where location like ?'));

$sql->bind_param('s', $consulta);
$sql->execute();
$sql->bind_result($location);

$data = array();

while ($sql->fetch()) {
    $data[] = array('label' => $location);
}

在这种情况下,查询速度很重要。


问题答案:

否,准备好的查询(正确使用时)将确保对数据进行正确的转义以进行安全查询。您有点正确地使用它们,只需要更改一件事。因为您使用的是“?”
占位符,最好通过execute方法传递参数。

$sql->execute(array($consulta));

请注意,如果要将其输出到页面,数据库清理并不意味着可以在HTML中安全显示,因此也可以在其上运行htmlspecialchars()。



 类似资料:
  • 问题内容: 在PDO :: Prepare页上指出: “并且通过消除对参数的手动引用来帮助防止SQL注入攻击” 知道这一点,是否有一个像mysql_real_escape_string()这样的PHP函数可以照顾到PDO的转义?还是PDO会为我做好一切转义? 编辑 我现在意识到我问了一个错误的问题。我的问题确实是,“ PDO会为我做什么?” 我现在通过这些答案意识到,它实际上仅消除了对引号进行转义

  • 使用PHP和MySQLi,我有一个简单的表单,其中包含4个HTML 5下拉列表输入。现在想知道我是否仍然必须使用Prepared语句来保护我的数据库?我是否仍有SQL注入问题的风险?或者使用此类输入是否存在任何其他类型的风险。谢谢

  • 将Camel 2.13.1与Spring 2.7.11一起使用,并在尝试使用SQL组件运行更新查询时收到SQL异常。下面是如何将更新查询添加到路由中,并使用主体中的java.util.Map将输入参数值传递给该语句。 主要问题:如果我在准备好的语句中只有一个输入参数,那么它工作得很好…如果我有以下更新查询中的多个,那么它将失败,出现sql异常

  • 问题内容: 我正在重新设计一个使用最小数据库的PHP驱动的网站。原始版本使用“伪准备语句”(执行引号和参数替换的PHP函数)来防止注入攻击并将数据库逻辑与页面逻辑分开。 用一个使用PDO和真正的预备语句的对象替换这些临时功能似乎很自然,但是在对它们进行阅读之后,我不太确定。PDO似乎仍然是一个好主意,但是准备好的语句的主要卖点之一是能够重用它们……我永远不会。这是我的设置: 这些语句都很简单。大多

  • 我有一个将列名映射到值的。要更新的列事先未知,在运行时决定。 例如< code>map = {col1: "value1 ",col2: "value2"}。 我想执行一个< code>UPDATE查询,用这些列将表更新为相应的值。我能做以下事情吗?如果没有,有没有一种优雅的方法可以不用手动构建查询?