현재 위치: > 최신 기사 목록> 함수는 란 무엇을 의미합니까? 당신이 알아야 할 몇 가지 상황

함수는 란 무엇을 의미합니까? 당신이 알아야 할 몇 가지 상황

gitbox 2025-06-09

PHP에서 MySQLI Extension을 사용하여 데이터베이스를 운영 할 때 $ mysqli-> Infected_rows는 가장 최근에 실행 된 SQL 문이 얼마나 많은 행에 영향을 미쳤는지 알려주는 매우 일반적인 속성입니다. 그러나 때때로 우리는 $ mysqli-> 영향을 받는_rows 가 -1을 반환하는 상황이 발생합니다. 이것이 무엇을 의미합니까? 이 기사를 사용하면 반품 -1을 자세히 나타내는 몇 가지 일반적인 상황을 분석하여 코드 문제를 더 잘 이해하고 문제 해결하는 데 도움이됩니다.


mysqli :: $ inffected_rows 란 무엇입니까?

mysqli :: $ inffected_rows는 지난번에 실행 된 삽입, 업데이트 및 삭제 명령문의 영향을받는 행의 수를 반환합니다. 예를 들어:

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->query("UPDATE users SET active = 1 WHERE id = 10");
echo $mysqli->affected_rows; // 영향을받는 행의 수를 출력하십시오
?>

이 업데이트 명령문이 성공적으로 실행되면 $ infectreped_rows는 비 음성 정수를 반환하여 실제 행의 수를 수정합니다. 그러나 오류가 발생하거나 특별한 상황이 발생하면 반환 값은 -1 일 수 있습니다.


mysqli :: $ 영향을받는 _rows가 -1을 반환하는 몇 가지 상황

1. SQL 문 실행에 실패했습니다

구문 오류와 같은 SQL 문이 실행되지 않으면 테이블이 존재하지 않으면 $ infectrepted_rows는 -1을 반환합니다. 현재 오류 메시지를 확인하여 다음을 결정해야합니다.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$result = $mysqli->query("UPDATE non_existing_table SET active=1");

if ($result === false) {
    echo "쿼리가 실패했습니다,오류 메시지:" . $mysqli->error;
    echo "영향을받는 행의 수:" . $mysqli->affected_rows; // 여기에 출력됩니다 -1
}
?>

2. 행 수에 영향을 미치지 않는 쿼리 실행

$ inffected_rows는 클래스 운영 수정 에만 의미가 있습니다 (삽입, 업데이트, 삭제). 데이터를 변경하지 않는 Select, Show 또는 기타 쿼리를 실행하는 경우 $ infectreped_rows는 -1을 반환합니다.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->query("SELECT * FROM users");
echo $mysqli->affected_rows; // 산출 -1,왜냐하면SELECT행 수에 영향을 미치지 않습니다
?>

3. 거래되지 않거나 자동 커밋이 폐쇄되지 않았습니다

트랜잭션을 사용하는 경우 수정을 수행하지만 커밋하지 않으면 $ inffected_rows는 이상치를 반환 할 수 있습니다. 거래가 올바르게 제출되었는지 확인하십시오.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$mysqli->autocommit(false);
$mysqli->query("UPDATE users SET active=1 WHERE id=5");

echo $mysqli->affected_rows; // 여전히 정확하게 보일 수 있습니다
$mysqli->commit();
?>

커밋되지 않은 거래는 실제 실패가 효력을 발생시킬 수 있으며, 영향을받는 _rows는 일반적으로 올바르게 돌아 오지만 특별한 경우에 오도 될 수 있습니다.

4. 전처리 진술의 부적절한 사용

전처리 명세서와 함께 실행되면 경우에 따라 $ stmt-> infected_rows가 -1 일 수 있습니다. 예를 들어, 행 수를 반환하는 것을 지원하지 않는 문은 실행되거나 쿼리가 실패합니다.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$stmt = $mysqli->prepare("UPDATE users SET active=1 WHERE id=?");
$id = 10;
$stmt->bind_param("i", $id);
$stmt->execute();

echo $stmt->affected_rows; // 아마-1,실행 예외를 나타냅니다
?>

오류가 있는지 확인하려면 $ stmt-> 오류를 확인하십시오.


-1이 반환되는 상황을 올바르게 처리하는 방법은 무엇입니까?

  1. SQL 실행이 성공했는지 확인하십시오 <br> 반환 값이 False 인지 결정하고 자세한 오류 정보를 얻기 위해 $ mysqli-> 오류를 호출합니다.

  2. SQL 문 유형을 확인하십시오
    영향을 받은_rows는 수정 작업에만 유효하며 쿼리 문은 항상 -1을 반환합니다.

  3. 거래 상태를 확인하십시오 <br> 작업을 수정하는 거래가 제출되었는지 확인하십시오.

  4. 전처리 진술에 대한 잘못된 판단 <br> $ stmt-> execute ()가 성공했는지 여부를 확인하고 정시에 오류를 처리하십시오.


요약

  • mysqli :: $ inffected_rows는 -1을 반환합니다. 이는 일반적으로 가장 최근의 SQL 실행이 실패했거나 행 수에 영향을 미치지 않는 문의 실행을 의미합니다.

  • 이를 사용할 때는 오류 정보와 SQL 문 유형을 결합하여 판단해야합니다.

  • 코드를 작성할 때 $ mysqli-> error 또는 $ stmt-> 오류를 확인하는 습관을 개발하면 문제를 신속하게 찾는 데 도움이 될 수 있습니다.

위의 방법을 통해 mysqli :: $ inffected_rows가 -1을 반환하는 상황을보다 정확하게 이해하고 처리 할 수있어 코드의 견고성을 향상시키고 효율성을 디버깅 할 수 있습니다.