현재 위치: > 최신 기사 목록> [여러 SQL 쿼리를 실행할 때 Real_Query 기능에 대한 실제 팁 및 작동 제안

[여러 SQL 쿼리를 실행할 때 Real_Query 기능에 대한 실제 팁 및 작동 제안

gitbox 2025-06-11

Real_Query () 소개

mysqli :: real_query () 는 php의 mysqli 확장자가 제공하는 낮은 수준의 함수로, 결과를 즉시 설정하지 않고 SQL 쿼리 문을 MySQL 서버에 보내는 데 사용됩니다. 핵심 설계는 Store_result ()Use_result () 와 함께 사용되므로 개발자는 결과를 처리하기 전에 동작을 세밀하게 제어 할 수 있으며 여러 쿼리를 실행할 때 명확한 실행 프로세스를 유지할 수 있습니다.

 $mysqli = new mysqli("localhost", "user", "password", "database");
$sql = "SELECT * FROM users";
$mysqli->real_query($sql);
$result = $mysqli->store_result();

여러 SQL 쿼리를 실행하기위한 일반적인 시나리오

Real_Query () 자체는 한 번에 여러 쿼리 문을 실행하는 것을 지원하지 않지만 (세미콜론으로 분리) 기능에 대한 호출을 여러 번 제어 하여이 동작을 시뮬레이션하거나 Multi_Query () 와 함께 조합 쿼리를 구현할 수 있습니다. 여러 진술을 하나씩 실행 해야하는 경우 다음은 실현 가능하고 안전한 방법입니다.

 $queries = [
    "INSERT INTO logs (event) VALUES ('login')",
    "UPDATE users SET last_login = NOW() WHERE id = 1",
    "SELECT * FROM users WHERE id = 1"
];

foreach ($queries as $query) {
    if (!$mysqli->real_query($query)) {
        echo "Query failed: " . $mysqli->error;
        continue;
    }

    if ($result = $mysqli->store_result()) {
        while ($row = $result->fetch_assoc()) {
            print_r($row);
        }
        $result->free();
    }
}

사용 시나리오에서 몇 가지 실용적인 팁

1. 거래를 잘 통제합니다

Real_Query ()를 사용하여 여러 쿼리를 실행하는 동안 복잡한 비즈니스 로직을 트랜잭션 메커니즘과 함께 조합하여 구현할 수 있습니다.

 $mysqli->begin_transaction();

try {
    $mysqli->real_query("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $mysqli->real_query("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    $mysqli->commit();
} catch (Exception $e) {
    $mysqli->rollback();
    error_log($e->getMessage());
}

2. SQL 주입 위험을 피하십시오

Real_Query () 는 기본 기능이지만 전처리 메커니즘과 함께 사용해야합니다. 전처리를 수행 할 수없는 상황에서는 real_escape_string ()을 사용하여 사용자 입력을 피하십시오.

 $name = $mysqli->real_escape_string($_GET['name']);
$sql = "SELECT * FROM users WHERE name = '$name'";
$mysqli->real_query($sql);
$result = $mysqli->store_result();

3. 시각적 디버깅 제안

개발자가 SQL의 실행 프로세스를보다 명확하게 이해하도록 돕기 위해 real_query () 로 호출 한 후 현재 실행 명령문과 실행 시간을 기록 할 수 있습니다.

 $start = microtime(true);
$mysqli->real_query($sql);
$duration = microtime(true) - $start;
file_put_contents('/var/log/sql_exec.log', "Executed in $duration: $sql\n", FILE_APPEND);

4. 구조화되지 않은 쿼리와 함께 사용하십시오

때로는 인터페이스에서 구조화 된 데이터를 반환 한 다음 SQL로 변환하는 것과 같은 일부 생성 SQL에 Real_Query ()를 사용합니다.

 $data = file_get_contents('https://gitbox.net/api/v1/users');
$users = json_decode($data, true);

foreach ($users as $user) {
    $name = $mysqli->real_escape_string($user['name']);
    $mysqli->real_query("INSERT INTO users (name) VALUES ('$name')");
}

메모 및 요약

Real_Query ()는 보다 자세한 제어를 제공하지만 기본 기능으로 인해 오류가 발생하기 쉽습니다. 개발자는 사용해야합니다.

  • 쿼리가 결과를 반환하는지 여부를 명확히하기 위해;

  • 결과 세트 리소스를 수동으로 관리합니다.

  • 오류 처리 로직에주의하십시오.

  • 장황 코드를 일으키는 학대를 피하십시오.

전반적으로 Real_Query () 는 SQL 실행에 대한 더 깊은 제어 요구가있을 때 강력한 도구이며 특히 중간 및 복잡한 데이터 처리 또는 데이터베이스 미들웨어 구현에 적합합니다. 트랜잭션, 결과 처리 및 로깅 메커니즘 사용과 결합하여 장점을 극단으로 가져올 수 있습니다.

  • 관련 태그:

    SQL