"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > PHP 준비 명령문 데이터베이스 업데이트에서 잘못된 매개변수 순서를 해결하는 방법은 무엇입니까?

PHP 준비 명령문 데이터베이스 업데이트에서 잘못된 매개변수 순서를 해결하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:484

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

데이터베이스 업데이트를 위한 PHP 준비 명령문

이 토론에서는 SQL 주입과 같은 취약점을 방지하기 위해 PHP에서 준비된 명령문을 적절하게 활용하는 데 중점을 둡니다. 문제의 코드 블록의 목적은 준비된 문을 사용하여 단일 필드로 데이터베이스 테이블을 업데이트하는 것입니다.

제공된 코드에서 class.Scripts.inc 파일의 update() 메서드는 준비된 문을 사용합니다. 데이터 덤프 테이블을 업데이트하려는 시도의 문입니다. 그러나,bind_param() 메소드 수행 중 잘못된 매개변수 순서로 인해 실행이 실패합니다. 현재 코드는 $id 및 $content 순서로 매개변수를 바인딩하지만 SQL 문에서는 반대 순서로 매개변수를 바인딩하므로 레코드 식별이 잘못되고 행이 영향을 받지 않습니다.

아래 수정된 코드는 이 문제를 해결합니다. 매개변수를 올바른 순서로 바인딩하고 추가 오류 처리를 제공하여 오류를 발생시킵니다:

$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
    trigger_error($this->mysqli->error, E_USER_ERROR);
    return;
}

$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);

/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';

/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
    trigger_error($stmt->error, E_USER_ERROR);
}

printf("%d Row inserted.\n", $stmt->affected_rows);

특정 문의 사항에 대해:

  1. 표시된 "0 행이 삽입되었습니다" 메시지가 만료되었습니다. 역순으로 매개변수 순서를 변경합니다. id 및 content 매개변수가 잘못된 순서로 바인딩되어 WHERE 절이 일치하는 행이 없습니다.
  2. 테이블을 업데이트할 때 필요한 필드만 수정하는 것이 허용됩니다. 표의 다른 열은 변경되지 않습니다.
릴리스 선언문 이 글은 1729512196에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3