현재 위치: > 최신 기사 목록> Serialize를 사용하여 데이터베이스 개체에 대한 액세스를 처리하는 방법은 무엇입니까?

Serialize를 사용하여 데이터베이스 개체에 대한 액세스를 처리하는 방법은 무엇입니까?

gitbox 2025-05-19

PHP에서 직렬화 함수는 PHP 데이터 구조 (예 : 객체 또는 배열)를 저장 또는 전송할 수있는 문자열로 변환하는 데 사용됩니다. 비 제외 기능은이 문자열을 원래 데이터 구조로 다시 변환합니다. 이 두 기능을 사용하면 PHP 객체를 데이터베이스에 쉽게 저장하고 필요한 경우 복구 할 수 있습니다.

이 기사에서는 특히 데이터베이스 객체를 처리 할 때 PHP에서 데이터베이스 객체의 액세스 및 복구를 달성하기 위해 직렬화비 서식을 사용하는 방법을 살펴 봅니다. 간단한 예를 들어 객체를 직렬화하여 데이터베이스에 저장하는 방법을 이해하고 데이터베이스에서 객체를 복구하는 방법을 이해할 수 있습니다.

1. 직렬화 된 객체는 데이터베이스에 저장됩니다

사용자 객체를 나타내는 사용자 클래스가 있고 사용자 객체를 데이터베이스에 저장하려고한다고 가정합니다. 저장하기 전에 객체를 문자열로 직렬화해야합니다.

1 단계 : 간단한 사용자 클래스를 정의합니다

 class User {
    public $name;
    public $email;

    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }

    public function __toString() {
        return "Name: $this->name, Email: $this->email";
    }
}

2 단계 : 데이터베이스 연결 생성 및 직렬화 된 개체 삽입

다음으로 데이터베이스 연결을 생성하고 직렬화 된 사용자 객체를 데이터베이스에 저장합니다.

 // 데이터베이스 연결(사용한다고 가정합니다 MySQL)
$mysqli = new mysqli("localhost", "username", "password", "database_name");

// 检查데이터베이스 연결
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

// a User 물체
$user = new User("Alice", "[email protected]");

// 将물체序列化
$serializedUser = serialize($user);

// 将序列化的물체存入数据库
$stmt = $mysqli->prepare("INSERT INTO users (user_data) VALUES (?)");
$stmt->bind_param("s", $serializedUser);
$stmt->execute();

echo "User saved successfully!";

이 코드에서는 사용자 객체를 직렬화 함수를 통해 저장할 수있는 문자열로 변환하여 데이터베이스에 삽입합니다. 실제 데이터베이스에서 user_data 필드는 일반적으로 직렬화 된 데이터를 저장하는 텍스트 또는 블로브 유형 필드입니다.

2. 데이터베이스에서 객체를 복구합니다

데이터베이스에 저장된 객체를 복구해야 할 때는 비 제외 기능을 통해 직렬화 된 문자열을 객체로 다시 변환 할 수 있습니다.

3 단계 : 데이터베이스에서 직렬화 된 객체를 제거하고 복원하십시오.

 // 查询数据库获取序列化的물체
$result = $mysqli->query("SELECT user_data FROM users WHERE id = 1");

if ($row = $result->fetch_assoc()) {
    // 직렬화 된 문자열을 가져옵니다
    $serializedUser = $row['user_data'];

    // 将序列化的字符串恢复为물체
    $user = unserialize($serializedUser);

    // 输出恢复后的물체
    echo "Recovered User: " . $user;
}

여기서는 비 제외 기능을 통해 데이터베이스에서 원래 사용자 객체로 가져온 직렬화 된 문자열을 복원합니다. 그런 다음 일반 객체에서 작동하는 것처럼 속성과 방법에 액세스 할 수 있습니다.

3. 주목할만한 것들

  • 보안 : 비조리를 사용할 때, 특히 사용자 입력 또는 신뢰할 수없는 소스의 데이터를 실시 할 때는 극도로주의를 기울여야합니다. 악의적 인 사용자는 특수 직렬화 문자열을 구성하여 위험한 코드를 실행할 수 있습니다. 이를 방지하기 위해 비 시절 의 두 번째 매개 변수를 사용하여 건조 된 클래스를 제한 할 수 있습니다.

     $user = unserialize($serializedUser, ["allowed_classes" => ["User"]]);
    
  • 성능 : 객체의 직렬화 및 사막화는 특히 객체가 크거나 자주 작동하는 경우 성능에 영향을 줄 수 있습니다. 객체 저장 및 복원 비용을 고려할 때 데이터베이스 모델을 설계 할 때는 적절한 저장소 방법을 선택할 수 있습니다.

  • 버전 작성 : 클래스의 구조가 변경되면 (예 : 속성 추가 또는 제거) 원래 직렬화 된 데이터가 올바르게 복원되지 않을 수 있습니다. 이를 처리하기 위해 버전 제어를 사용할 수 있거나 사막화 중에 호환성 점검을 수행 할 수 있습니다.

결론적으로

SerializeUnserialize 기능을 통해 PHP는 객체를 저장하고 복원하는 편리한 방법을 제공합니다. 이 방법은 데이터베이스 개체를 처리 할 때 특히 효과적입니다. 그러나 실제로 사용하면 시스템의 안정성과 신뢰성을 보장하기 위해 안전 및 성능 문제에주의를 기울여야합니다. 위의 예와 기술을 사용하면 데이터베이스에서 객체의 액세스 및 복구를 쉽게 구현할 수 있어야합니다.