PHP 개발에서 특히 데이터베이스 작업을 처리 할 때 오류 정보를 캡처하고 처리하는 것이 중요합니다. 특히 MySQL 데이터베이스를 사용할 때 MySQLI_STMT :: $ 오류는 SQL 쿼리 오류를 얻는 데 사용되는 속성입니다. 개발자가 적시에 문제를 발견하고 해결하는 데 도움이 될 수 있습니다. 단위 테스트 환경에서는이를 사용하여 오류 정보를 캡처하고 처리하여 데이터베이스 작업의 디버깅 및 최적화 효율성을 향상시킬 수 있습니다.
이 기사에서는 PHP 단위 테스트에서 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 :: $ error 및 mysqli_stmt :: $ errno를 확인하면 오류 메시지를 캡처하여 디버깅 할 수 있습니다.
단위 테스트 환경에서는 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 쿼리가 성공적으로 실행되는지 확인하는 데 사용됩니다. 오류가 발생하면 해당 오류 메시지를 출력하여 디버그에 도움이됩니다.
프로덕션 환경에서 오류 정보를 직접 출력하는 것 외에도 나중에보기를 위해 로그에 오류 정보를 기록 할 수도 있습니다. 다음 예제는 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를 통해보다 강력한 데이터베이스 작업 코드를 작성하려면이 팁을 배우십시오!