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)请注意,如果在绑定参数后传递要执行的数组,则会出现问题。请参见php.net文档中的这一注释:需要注意的是,execute()
在使用PDO扩展时只能接受数组参数。使用mysqli时,execute()
没有参数,因此需要使用bind_param()
。可能存在重复的