>데이터 베이스 >MySQL 튜토리얼 >준비된 진술은 PHP에서 `mysql_real_escape_string()`의 필요성을 제거합니까?

준비된 진술은 PHP에서 `mysql_real_escape_string()`의 필요성을 제거합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-04 11:34:01603검색

Do Prepared Statements Eliminate the Need for `mysql_real_escape_string()` in PHP?

Prepared 문 및 이스케이프: 균형 조정

PHP에서 준비된 문을 사용할 때 이를 방지하기 위해 mysql_real_escape_string()을 사용해야 합니까? SQL 주입? 이 질문에 답하기 위해 특정 쿼리와 그 구현을 살펴보겠습니다.

쿼리 및 구현

<code class="php">$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);
}
?>

**The Dilemma**

The provided query aims to fetch locations that match the term entered in the $_REQUEST["term"] variable. While the usage of a prepared statement is commendable for preventing SQL injections, the implementation raises a query: is mysql_real_escape_string() still necessary in this case?

**The Verdict: No, but a Refinement is Suggested**

When using prepared statements, as long as they are employed correctly, they effectively shield against SQL injections. In this instance, mysql_real_escape_string() is redundant. However, a minor improvement can enhance the code's clarity and efficiency.

Rather than using bind_param('s', $consulta), it's more straightforward to pass parameters through the execute method, especially when utilizing the '?' placeholder. The updated code would be:
</code>

$sql->execute([$consulta]);

중요한 이유

매개변수 바인딩이 포함된 준비된 명령문은 외부 데이터가 SQL 쿼리를 조작할 수 없도록 보장합니다. 그러나 SQL 매개변수 바인딩만으로는 HTML 내에서 안전한 표시가 보장되지 않는다는 점을 기억하십시오. 이를 위해서는 쿼리 결과를 출력하기 전에 htmlspecialchars()와 같은 기능을 사용하는 것이 중요합니다.

위 내용은 준비된 진술은 PHP에서 `mysql_real_escape_string()`의 필요성을 제거합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.