현재 위치: > 최신 기사 목록> mysqli_prepare ()와 함께 attr_get을 사용하기위한 모범 사례

mysqli_prepare ()와 함께 attr_get을 사용하기위한 모범 사례

M66 2025-05-27

mysqli_prepare ()는 sql 문을 준비하는 데 사용되며 mysqli_stmt 문장을 반환합니다. 예를 들어:

 $mysqli = new mysqli("m66.net", "username", "password", "database");

if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM users WHERE email = ?";
$stmt = $mysqli->prepare($sql);

if (!$stmt) {
    die("전처리가 실패했습니다: " . $mysqli->error);
}

여기, ? 매개 변수 자리 표시 자이며, 특정 값은 향후 BIND_PARAM을 통해 바인딩됩니다.

2. mysqli_stmt :: attr_get 및 attr_set의 역할

MySQLI_STMT 객체는 일부 속성의 획득 및 설정을 지원하여 전처리 문의 동작을 제어 할 수 있습니다. PHP는 두 가지 관련 방법을 제공합니다.

  • attr_get ($ attr) : 지정된 속성의 현재 값을 가져옵니다.

  • attr_set ($ attr, $ value) : 지정된 속성의 값을 설정합니다.

예를 들어, MySQLI에서 지원하는 속성 상수는 다음과 같습니다.

  • mysqli_stmt_attr_update_max_length : 최대 길이를 업데이트할지 여부를 제어합니다.

  • mysqli_stmt_attr_cursor_type : 커서 유형을 설정합니다 (예 : 비 쿠저, 읽기 전용 커서 등).

  • mysqli_stmt_attr_prefetch_rows : 프리 페치 행의 수.

3. mysqli_prepare ()와 attr_get을 결합한 예제

커서를 사용하여 많은 양의 데이터를 처리하고 모든 결과 세트를 한 번에로드하지 않으려면 커서 속성을 설정할 수 있다고 가정 해 봅시다.

 $sql = "SELECT * FROM large_table WHERE category = ?";
$stmt = $mysqli->prepare($sql);

if (!$stmt) {
    die("전처리가 실패했습니다: " . $mysqli->error);
}

// 커서 유형을 설정하십시오 MYSQLI_CURSOR_TYPE_READ_ONLY
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);

// 바인딩 매개 변수
$category = 'books';
$stmt->bind_param("s", $category);

$stmt->execute();

// 현재 커서 유형을 가져옵니다
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "현재 커서 유형은입니다: " . $currentCursorType . PHP_EOL;

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    print_r($row);
}

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

위의 예는 명령문을 준비한 후 커서 유형을 설정하고 attr_get () 로 현재 속성을 확인하는 방법을 보여줍니다.

4. 모범 사례 권장 사항

4.1 사전 설정 속성

Execute ()을 호출하기 전에 Cursor 유형, 프리 페치 행 카운트 등과 같은 필요한 모든 속성을 실행 중에 적용 할 수 있도록 가능한 한 많이 설정하십시오.

4.2 오류 및 예외를 포착합니다

전처리 및 속성 설정이 모두 실패 할 수 있습니다. 런타임 충돌을 피하기 위해 반환 값을 감지하고 오류를 잘 처리하십시오.

4.3 필요에 따라 Cursor 유형을 합리적으로 선택하십시오

커서 유형은 메모리와 성능에 영향을 미치며 특히 큰 결과 세트를 처리 할 때 읽기 전용 커서 ( MySQLI_CURSOR_TYPE_READ_ONLY )가 일반적으로 더 나은 선택입니다.

4.4 다른 MySQL 버전과의 호환성

일부 속성은 이전 버전의 MySQL 서버 또는 PHP 버전에서는 지원되지 않을 수 있습니다. 개발 중 대상 환경의 지원을 확인해야합니다.

5. 결론

MySQLI_PREPARE ()를 합리적으로 결합하여 MySQLI_STMT :: ATT_GETATT_SET는 코드의 보안을 유지하면서 데이터베이스 작업을보다 유연하고 효율적으로 만들 수 있습니다. 적절한 속성, 특히 커서 및 프리 페치 행 카운트를 설정하면 많은 양의 데이터를 처리 할 때 성능 및 리소스 사용량을 크게 최적화 할 수 있습니다.