提问人:anvd 提问时间:6/4/2011 最后编辑:Dharmananvd 更新时间:11/16/2022 访问量:8655
使用 prepared 语句时是否需要 mysql_real_escape_string()?
Is mysql_real_escape_string() necessary when using prepared statements?
问:
对于此查询,是否有必要使用 ?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);
}
在这种情况下,查询速度很重要。
答:
24赞
SamT
6/4/2011
#1
不,准备好的查询(如果使用得当)将确保数据不会更改您的 SQL 查询并提供安全的查询。你正在正确地使用它们,但你只能做一个小小的改变。由于您使用的是“?”占位符,因此通过 execute 方法传递参数会更容易。
$sql->execute([$consulta]);
如果你把它输出到你的页面,要小心,SQL参数绑定并不意味着它在HTML中显示是安全的,所以在输出时也要运行它。htmlspecialchars()
评论
0赞
anvd
6/4/2011
所以,像这样的事情?$sql->bind_param('s');$sql->execute(array($consulta));
0赞
SamT
6/4/2011
有点,只要松开那里的bind_param,你应该很好。你所做的只是在你去调用 ->execute() 时绑定你的参数;
0赞
SamT
6/4/2011
不是真的,这只是使用“?”占位符时的方法。使用命名占位符时,需要使用 ->bind_param(),例如:$sql = $db->prepare('select location from location_job where location like :item')); $sql->bind_param(':item', $consulta);
1赞
damianb
6/8/2011
请注意,如果在绑定参数后传递要执行的数组,则会遇到问题。请参阅 php.net 文档上的此说明:us.php.net/manual/en/pdostatement.execute.php#97531
3赞
phn
3/22/2017
需要注意的一点是,使用 PDO 扩展时只能采用数组参数。使用 mysqli 时没有参数,因此您需要使用 .execute()
execute()
bind_param()
评论