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

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

DDD
풀어 주다: 2024-10-21 20:06:29
원래의
774명이 탐색했습니다.

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

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

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

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

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

<code class="php">$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);</code>
로그인 후 복사

특정 문의 사항에 대해:

  1. 발생한 "0개 행이 삽입됨" 메시지의 원인은 다음과 같습니다. 매개변수 순서가 반대입니다. id 및 content 매개변수가 잘못된 순서로 바인딩되어 WHERE 절과 일치하는 행이 없습니다.
  2. 테이블을 업데이트할 때 필요한 필드만 수정하는 것이 허용됩니다. 테이블의 다른 열은 변경되지 않습니다.

위 내용은 PHP 준비 명령문 데이터베이스 업데이트에서 잘못된 매개변수 순서를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿