Php 使用准备好的语句时是否需要mysql\u real\u escape\u string()?

Php 使用准备好的语句时是否需要mysql\u real\u escape\u string()?,php,mysql,mysqli,prepared-statement,sanitize,Php,Mysql,Mysqli,Prepared Statement,Sanitize,对于此查询,是否需要使用mysql\u real\u escape\u string 是否有任何改进或查询是否正常 $consulta = $_REQUEST["term"]."%"; ($sql = $db->prepare('select location from location_job where location like ?')); $sql->bind_param('s', $consulta); $sql->execute(); $sql->bind

对于此查询,是否需要使用
mysql\u real\u escape\u 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(数组($consulta))


如果要将其输出到页面,请务必小心,数据库清理并不意味着它可以安全地显示在HTML中,所以也要在其上运行htmlspecialchars()。

那么,类似这样的操作$sql->bind_参数('s')$sql->execute(数组($consulta));Sorta,只要松开那里的绑定参数,你就应该很好了。当您转到call->execute()时,您所做的只是绑定参数;不完全是这样,这只是使用“?”占位符的一种方式。使用命名占位符时,需要使用->bind_param(),例如:
$sql=$db->prepare('select location from location_job where location like:item')$sql->bind_参数(':item',$consulta)execute()
在使用PDO扩展时只能接受数组参数。使用mysqli时,execute()
没有参数,因此需要使用
bind_param()
。可能存在重复的