현재 위치: > 최신 기사 목록> PHP 단위 테스트에서 mysqli_stmt :: $ 오류 정보를 캡처하는 방법

PHP 단위 테스트에서 mysqli_stmt :: $ 오류 정보를 캡처하는 방법

gitbox 2025-05-28

PHP 개발에서 특히 데이터베이스 작업을 처리 할 때 오류 정보를 캡처하고 처리하는 것이 중요합니다. 특히 MySQL 데이터베이스를 사용할 때 MySQLI_STMT :: $ 오류는 SQL 쿼리 오류를 얻는 데 사용되는 속성입니다. 개발자가 적시에 문제를 발견하고 해결하는 데 도움이 될 수 있습니다. 단위 테스트 환경에서는이를 사용하여 오류 정보를 캡처하고 처리하여 데이터베이스 작업의 디버깅 및 최적화 효율성을 향상시킬 수 있습니다.

이 기사에서는 PHP 단위 테스트에서 MySQLI_STMT :: $ 오류 오류 메시지를 캡처하고 디버깅 팁을 제공하는 방법을 소개합니다.

1. 단위 테스트에서 mysqli_stmt :: $ 오류를 사용하십시오

먼저 데이터베이스 연결을 만들고 SQL 쿼리를 실행해야합니다. 데이터베이스 작업을 수행 할 때 오류가 발생하면 MySQLI_STMT :: $ 오류가 오류 메시지를 저장합니다. 다음은 mysqli_stmt :: $ 오류를 캡처하고 처리하는 방법을 보여주는 간단한 예입니다.

 <?php
// 우리가 설립했다고 가정 해 봅시다MySQLi연결하다
$mysqli = new mysqli("localhost", "user", "password", "database");

// 检查연결하다是否成功
if ($mysqli->connect_error) {
    die("연결하다失败: " . $mysqli->connect_error);
}

// 준비하다SQL쿼리 문
$sql = "SELECT * FROM nonexistent_table"; // 의도적으로 잘못된 쿼리

// 전처리 진술
$stmt = $mysqli->prepare($sql);

if ($stmt === false) {
    // 전처리가 실패한 경우,오류를 잡습니다
    echo "전처리 진술错误: " . $mysqli->error;
} else {
    // 쿼리를 실행하십시오
    $stmt->execute();

    // 실행 결과를 확인하십시오
    if ($stmt->errno) {
        // 캡처 및 출력 오류 메시지
        echo "실행 오류: " . $stmt->error;
    } else {
        echo "쿼리 성공";
    }
}

// 关闭연결하다
$stmt->close();
$mysqli->close();
?>

이 예에서, 우리는 의도적으로 존재하지 않는 notexistent_table 테이블 이름을 사용하여 쿼리가 실패하게됩니다. mysqli_stmt :: $ errormysqli_stmt :: $ errno를 확인하면 오류 메시지를 캡처하여 디버깅 할 수 있습니다.

2. 단위 테스트에서 오류 캡처

단위 테스트 환경에서는 PHPUnit 프레임 워크를 사용하여 테스트 할 수 있습니다. MySQLI_STMT :: $ 오류 오류 메시지를 캡처하기 위해 PHPUnit의 Assertion Method를 사용할 수 있습니다. 기본 단위 테스트 예는 다음과 같습니다.

 <?php
use PHPUnit\Framework\TestCase;

class DatabaseTest extends TestCase
{
    private $mysqli;

    protected function setUp(): void
    {
        // 设置数据库연결하다
        $this->mysqli = new mysqli("localhost", "user", "password", "database");
    }

    public function testQueryExecutionError()
    {
        // 의도적으로 잘못된 쿼리를 작성합니다
        $sql = "SELECT * FROM nonexistent_table";
        $stmt = $this->mysqli->prepare($sql);

        // 确保전처리 진술没有错误
        $this->assertFalse($stmt === false, "전처리 진술失败: " . $this->mysqli->error);

        // 쿼리를 실행하십시오
        $stmt->execute();

        // 실행이 성공했는지 확인하십시오
        $this->assertEquals(0, $stmt->errno, "쿼리 실행이 실패했습니다: " . $stmt->error);
    }

    protected function tearDown(): void
    {
        // 关闭数据库연결하다
        $this->mysqli->close();
    }
}
?>

이 단위 테스트에서는 고의적으로 잘못된 쿼리를 사용하여 실패한 데이터베이스 작업을 시뮬레이션했습니다. $ this-> assertfalse$ this-> assertequals 메소드는 SQL 쿼리가 성공적으로 실행되는지 확인하는 데 사용됩니다. 오류가 발생하면 해당 오류 메시지를 출력하여 디버그에 도움이됩니다.

3. 오류 메시지 및 로그 로그를 캡처합니다

프로덕션 환경에서 오류 정보를 직접 출력하는 것 외에도 나중에보기를 위해 로그에 오류 정보를 기록 할 수도 있습니다. 다음 예제는 mysqli_stmt :: $ 오류 정보를 로그 파일에 로그인하는 방법을 보여줍니다.

 <?php
// 우리가 설립했다고 가정 해 봅시다MySQLi연결하다
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("연결하다失败: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM nonexistent_table";
$stmt = $mysqli->prepare($sql);

if ($stmt === false) {
    error_log("전처리 진술错误: " . $mysqli->error, 3, "/var/log/mysql_errors.log");
} else {
    $stmt->execute();

    if ($stmt->errno) {
        error_log("실행 오류: " . $stmt->error, 3, "/var/log/mysql_errors.log");
    }
}

$stmt->close();
$mysqli->close();
?>

이 예에서 Error_Log 함수는 오류 정보를 /var/log/mysql_errors.log 파일에 로그인하는 데 사용됩니다. 이런 식으로, 우리는 오류 정보가 손실되지 않고 분석 후 편리하게 수행 할 수 있는지 확인할 수 있습니다.

요약

MySQLI_STMT :: $ 오류를 사용하여 오류 메시지를 캡처하고 처리하여 개발자는 데이터베이스 작업을보다 쉽게 ​​디버그하고 최적화 할 수 있습니다. PHP 단위 테스트에서는 PHPUnit 프레임 워크를 사용하여 오류를 포착하고 주장을하여 코드의 견고성을 더욱 향상시킬 수 있습니다. 또한 로깅은 잠재적 인 문제를 추적하고 해결하는 데 도움이되는 우수한 관행입니다.

PHP를 통해보다 강력한 데이터베이스 작업 코드를 작성하려면이 팁을 배우십시오!