mysqli :: $ info는 최근 실행 된 쿼리에서 생성 된 세부 정보를 반환하는 읽기 전용 속성입니다. 일반적으로 영향을받는 줄의 수, 경고 등과 같은 정보를 제공하는 데 사용됩니다 . 업데이트 후, 삭제 또는 삽입 후 ... 중복 키 업데이트 문에서 .
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->query("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
echo $mysqli->info;
이 속성은 특정 유형의 쿼리 후에 만 유효하며 쿼리가 성공적으로 실행 된 후에 만 의미있는 정보 만 반환합니다.
이것은 가장 일반적인 문제입니다. mysqli :: $ info는 업데이트 문과 같은 특정 쿼리 후에 만 설정됩니다. 쿼리가 추가 정보를 생성하지 않으면 $ mysqli-> info는 null 또는 빈 문자열을 반환합니다.
해결책:
사용하기 전에 쿼리 유형을 확인하여 적용 가능성을 확인하십시오. 또한 올바른 피드백을 얻으려면 $ mysqli-> inffected_rows 와 함께 사용하는 것이 좋습니다.
$result = $mysqli->query("UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY");
if ($result) {
echo "영향을받는 행의 수: " . $mysqli->affected_rows . "\n";
echo "추가 정보: " . ($mysqli->info ?? '정보가 없습니다') . "\n";
} else {
echo "쿼리가 실패했습니다: " . $mysqli->error;
}
쿼리가 실행되지 않으면 mysqli :: $ info는 여전히 존재하지만 콘텐츠는 신뢰할 수 없습니다. 쿼리 결과를 판단하지 않고 직접 액세스하지 않으면 무의미하거나 잘못된 정보를 얻을 수 있습니다.
해결책:
항상 쿼리가 성공했는지 여부를 판단 한 다음 mysqli :: $ info를 방문하십시오.
if ($mysqli->query($sql) === false) {
echo "실수: " . $mysqli->error;
} else {
echo "정보: " . $mysqli->info;
}
데이터베이스 연결의 문자 설정이 잘못 설정되면 MySQLI :: $ info는 garbled 또는 불완전한 정보를 반환 할 수 있습니다.
해결책:
예를 들어 데이터베이스에 연결 한 직후 올바른 문자 세트가 설정되어 있는지 확인하십시오.
$mysqli->set_charset('utf8mb4');
이렇게하면 MySQLI :: $ info 가 올바르게 표시되는 문자열이 올바르게 표시됩니다.
mysqli :: $ info는 마지막 성공적인 쿼리의 결과입니다. 중간에 다른 쿼리가 실행되면 속성에 액세스하면 이전 쿼리의 결과가 반환되어 오해가 발생할 수 있습니다.
해결책:
MySQLI :: $ info 에 각 액세스하기 전에 다른 관련없는 쿼리가 삽입되지 않거나 관련 쿼리 직후에만 액세스하지 마십시오.
예외 처리 : MySQLI_REPORT (MySQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) 와 결합하면 쿼리 오류를 일찍 포착하고 오류 정보의 오해를 피할 수 있습니다.
쿼리 리턴 값 판단 : mysqli :: $ Info Judges Query 결과뿐만 아니라 포괄적 인 판단을 위해 영향을 받는_rows 와 오류를 결합하는 것이 가장 좋습니다.
문서 참조 : MySQLI :: $ info 에 대한 공식 문서의 설명에 대해 자세히 알아보고 적용되는 시나리오 및 제한 사항을 이해하십시오.
요약하면, mysqli :: $ info는 실용적이지만 오해할만한 속성입니다. 쿼리 결과를 올바르게 판단하고 다른 MySQLI 속성과 함께 사용하면 사용 중에 오류를 효과적으로 피할 수 있습니다.
$mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->set_charset('utf8mb4');
$sql = "UPDATE users SET status = 'active' WHERE last_login > NOW() - INTERVAL 30 DAY";
if ($mysqli->query($sql) === false) {
echo "查询실수: " . $mysqli->error;
} else {
echo "영향을받는 행의 수: " . $mysqli->affected_rows . "\n";
echo "추가 정보: " . ($mysqli->info ?? '정보가 없습니다') . "\n";
}