데이터베이스 업데이트를 위한 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);
특정 문의 사항에 대해:
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3