PHP에서 MySQLI Extension은 MySQLI :: get_warnings 함수가 최신 데이터베이스 작업에서 생성 된 경고 정보를 얻는 데 사용되는 MySQL 데이터베이스를 작동하기위한 풍부한 인터페이스를 제공합니다. 이 기능은 MySQL 5.6 이상에서 잘 작동하지만 MySQL의 다양한 버전에서 호환성과 성능에 차이가 있으며 개발자를 사용할 때 문제가 발생할 수 있습니다. 이 기사는 mysqli :: get_warnings 의 호환성 문제를 자세히 소개하고 해당 솔루션을 제공합니다.
mysqli :: get_warnings 는 MySQLI 클래스의 방법으로, 현재 연결 작동의 가장 최근 실행을위한 경고 정보가 포함 된 MySQLI_Warning 객체 체인을 반환합니다. 경고 정보에는 경고 코드, 메시지 및 경고 수준이 포함됩니다.
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$mysqli->query("YOUR SQL STATEMENT");
if ($warning = $mysqli->get_warnings()) {
do {
echo "Warning: (" . $warning->errno . ") " . $warning->message . "\n";
} while ($warning = $warning->next());
}
위의 코드는 경고 체인을 얻고 가로 지르는 방법을 보여줍니다.
MySQL 버전 영향
MySQL 5.6 이상
MySQL 5.6은 경고에 대한 지원을 향상시키기 시작했습니다. mysqli :: get_warnings는 제대로 작동하고 경고 메시지를 반환 할 수 있습니다.
MySQL 5.5 이하 <br> MySQL 5.5 이하에서 경고 메커니즘 지원은 제한적입니다. 어떤 경우에는 mysqli :: get_warnings가 거짓을 반환 할 수 있으며, 이는 경고가 실제로 존재하더라도 얻을 수 없습니다.
MySQL 구성 영향
특정 구성 매개 변수 (예 : SQL_NOTES )는 경고 생성 및 기록에 영향을 미칩니다. 경고 메시지 기록을 끄면 get_warnings ()가 경고를받지 못합니다.
PHP 버전 및 MySQLI 드라이버
PHP 버전과 MySQLI 드라이버 버전 도이 방법의 성능에 영향을 미칩니다. MySQLI 확장의 초기 PHP 버전 경고 체인에 대한 지원은 불완전합니다.
$mysqli = new mysqli("gitbox.net", "user", "password", "database");
$mysqli->query("INSERT INTO test_table VALUES (1, 'duplicate')"); // 기본 키가 반복되었다고 가정하십시오,경고를 생성하십시오
$warnings = $mysqli->get_warnings();
if ($warnings === false) {
echo "경고를받을 수 없습니다,아마도MySQL버전 또는 구성이 지원되지 않습니다。";
} else {
do {
echo "경고 코드: " . $warnings->errno . ", 정보: " . $warnings->message . "\n";
} while ($warnings = $warnings->next());
}
MySQL 5.5 이하에서 $ 경고는 직접 거짓을 반환 할 수 있으며 경고를받을 수 없습니다.
MySQL 버전을 감지하십시오
관련 논리를 실행하기 전에 현재 MySQL 버전을 감지하고 get_warnings ()를 호출할지 여부를 결정하십시오.
$version = $mysqli->server_info;
if (version_compare($version, '5.6.0', '>=')) {
// 지원하다get_warnings
$warnings = $mysqli->get_warnings();
} else {
$warnings = false;
}
SQL 경고 대안
MySQL 버전이 낮고 get_warnings ()를 사용할 수없는 경우 Show Warnings SQL 명령을 실행하여 수동으로 경고를받을 수 있습니다.
$result = $mysqli->query("SHOW WARNINGS");
if ($result) {
while ($row = $result->fetch_assoc()) {
echo "Level: " . $row['Level'] . ", Code: " . $row['Code'] . ", Message: " . $row['Message'] . "\n";
}
}
통합 포장
함수를 캡슐화하고 버전에 따라 메소드를 얻기 위해 경고를 자동으로 전환하는 것이 좋습니다.
function getMysqlWarnings(mysqli $mysqli) {
if (version_compare($mysqli->server_info, '5.6.0', '>=')) {
$warnings = $mysqli->get_warnings();
$allWarnings = [];
if ($warnings !== false) {
do {
$allWarnings[] = [
'errno' => $warnings->errno,
'message' => $warnings->message,
];
} while ($warnings = $warnings->next());
}
return $allWarnings;
} else {
$result = $mysqli->query("SHOW WARNINGS");
$allWarnings = [];
if ($result) {
while ($row = $result->fetch_assoc()) {
$allWarnings[] = [
'level' => $row['Level'],
'code' => $row['Code'],
'message' => $row['Message'],
];
}
}
return $allWarnings;
}
}
mysqli :: get_warnings 함수는 MySQL 버전, 구성 및 PHP 버전의 차이로 인해 MySQL 경고 정보를 얻기에 이상적인 인터페이스이지만 실제 사용에서 호환성 문제가 발생할 수 있습니다. 이러한 문제를 해결하기 위해 개발자는 다음을 수행 할 수 있습니다.
MySQL 버전을 미리 감지하십시오
쇼 경고는 제 시간에 사용됩니다
코드 견고성 및 호환성을 향상시키기위한 경고 획득 논리의 통합 캡슐화
이러한 방식으로, 다양한 환경에서 데이터베이스 경고 정보를 효과적으로 얻을 수있어 응용 프로그램 안정성 및 사용자 경험을 향상시킬 수 있습니다.