데이터베이스 작업에 PHP의 MySQLI Extension을 사용할 때 MySQLI_RESULT :: $ 길이 속성을 통해 현재 행에서 각 필드의 실제 길이를 얻을 수 있습니다. 이 속성은 이진 또는 가변 길이 필드 (예 : Blob, Text)를 처리 할 때 특히 유용합니다. 그러나 필드 길이가 예상 한도 또는 정의 된 한계를 초과하는지 걱정하는 경우 어떻게 감지합니까? 이 기사는이 목표를 달성하는 방법을 이해하기 위해 단계별로 진행할 것입니다.
mysqli_result :: $ lengths는 mysqli_result 객체의 속성입니다. 배열의 각 요소가 현재 결과 세트에서 행으로 각 필드의 바이트 길이를 나타내는 배열을 반환합니다. 이 값은 데이터베이스 필드의 정의 된 길이가 아니라 데이터의 실제 길이입니다.
다음 MySQL 테이블 구조가 있다고 가정합니다.
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(20),
bio TEXT
);
데이터베이스에서 가져온 사용자 이름 필드가 Varchar (20) , 즉 20 자의 한계를 초과하지 않도록하려고합니다.
필드 정의와 $ 결과-> 길이를 결합하여 필드가 너무 길지는지 감지하는 기능을 실현할 수 있습니다.
<?php
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT id, username, bio FROM users";
$result = $mysqli->query($query);
if ($result) {
// 필드 정의 정보를 얻으십시오
$fields = $result->fetch_fields();
while ($row = $result->fetch_assoc()) {
$lengths = $result->lengths;
foreach ($fields as $index => $field) {
$fieldName = $field->name;
$maxLength = $field->length;
// 알아채다:~을 위한 VARCHAR 그리고 CHAR 전지,$field->length 캐릭터 길이입니다 * 문자 세트의 최대 바이트 수
// 실제 변환은 문자 세트와 결합되어야합니다,여기서 가정하십시오 UTF-8(최대 3-4 바이트/성격)
$expectedBytes = $maxLength * 4;
if ($lengths[$index] > $expectedBytes) {
echo "전지 '{$fieldName}' 내용 길이는 예상 한계를 초과합니다:{$lengths[$index]} 바이트\n";
}
}
}
}
$mysqli->close();
?>
$ field-> 길이는 일반적으로 최대 바이트 수에 의해 주어지며 문자 길이와 직접적으로 동일 할 수 없습니다. 특히 다중 바이트 문자 세트 (예 : UTF-8)를 사용할 때 바이트와 문자 간의 관계를 변환해야합니다.
Blob 또는 텍스트 유형 필드의 경우 MySQL 자체는 더 큰 길이를 허용하므로 비즈니스 로직을 기반으로 한도 기준을 사용자 정의해야합니다.
필드 컨텐츠가 탈출되거나 인코딩되면 바이트 길이도 증가 할 수 있습니다. 따라서 $ 결과-> 길이는 추정 방법으로 만 사용할 수 있습니다. 실제로 사용될 때 판단을 비즈니스 규칙과 결합하는 것이 좋습니다.
한계를 초과하는 필드는 데이터 소스 문제 또는 비즈니스 로직 오류 문제 해결을 위해 로그에 로그인 할 수 있습니다.
if ($lengths[$index] > $expectedBytes) {
file_put_contents("/var/log/field_overflow.log", date('c') . " - 전지 '{$fieldName}' 한도를 초과했습니다。길이: {$lengths[$index]}\n", FILE_APPEND);
}
예를 들어 웹 인터페이스를 통해 알람을 알 수 있습니다. 예를 들어, https://gitbox.net/api/notify?type=length_warning 과 유사한 인터페이스를 호출하여 알리십시오.
mysqli_result :: $ lengths 및 fetch_fields () 의 조합을 통해 데이터베이스의 필드 길이가 기대치를 충족하는지 효과적으로 모니터링 할 수 있습니다. 다국어 및 다중 문자 세트 시스템 에서이 탐지는 특히 중요하며 개발자가 잠재적 인 데이터 문제를 미리 발견하는 데 도움이 될 수 있습니다. 시스템의 견고성을 향상시키기 위해 데이터 가져 오기 및 사용자 입력과 같은 고위험 프로세스에 이러한 논리를 통합하는 것이 좋습니다.