현재 위치: > 최신 기사 목록> stmt_init에서 null 값을 처리하는 올바른 방법입니다

stmt_init에서 null 값을 처리하는 올바른 방법입니다

M66 2025-05-29

PHP를 사용하여 MySQL과 상호 작용할 때 MySQLI Extension은 MySQLI :: STMT_INIT가 전처리 명령문 개체를 초기화하는 데 사용되는 일반적인 기능 인 전처리 문을 실행하는 편리한 방법을 제공합니다. 그러나 NULL 값은 MySQL 및 PHP에서 특수 처리 방법을 갖기 때문에 개발자는 데이터베이스에서 NULL 값을 처리 할 때 몇 가지 과제에 직면 할 수 있습니다.

1. mysqli :: stmt_init 함수를 이해하십시오

먼저, mysqli :: stmt_init는 mysqli_stmt 객체를 초기화하는 데 사용되는 함수이며 mysqli_stmt 인스턴스를 반환합니다. SQL 주입 공격을 방지하고 쿼리 효율성을 향상시키는 데 도움이되는 전처리 명세서를 작성하고 실행하는 데 종종 사용됩니다.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->stmt_init();
?>

2. 전처리 명령문을 사용하여 매개 변수를 바인딩하십시오

mysqli :: stmt_init 에 의해 생성 된 mysqli_stmt 객체는 bind_param 함수를 사용하여 입력 매개 변수를 바인딩하는 데 사용될 수 있습니다. 바인딩 매개 변수의 경우 개발자는 매개 변수 유형을 지정해야하며 공통 유형은 다음과 같습니다.

  • 나는 정수를 나타냅니다

  • D는 부동 소수점 번호를 나타냅니다

  • s는 문자열을 의미합니다

  • B는 이진 데이터를 나타냅니다

경우에 따라 파라미터 값이 NULL 일 수 있으며 현재 특별한 처리가 필요합니다.

3. 값을 처리하는 방법?

MySQL에서 NULL 은 특별한 값이므로 NULL을 데이터베이스에 직접 전달할 때주의해야합니다. 기본적으로, bind_param을 사용할 때, 매개 변수 값이 null 이면 SQL null 로 자동 변환되지 않습니다. BIND_PARAM 을 통해 특별 처리를 수행해야합니다.

3.1 Bind_Param을 사용한 값 전달

레코드를 삽입해야한다고 가정하고 일부 필드에는 값이 있다고 가정합니다. 바인딩 매개 변수 인 경우 필드의 값이 NULL 인 경우 BIND_PARAM을 사용할 때 NULL 이 전달되고 유형 이 I , D 또는 S 로 설정되어 있고 추가 변수는 파라미터가 NULL 인지 명시 적으로 표시하는 데 사용됩니다.

 <?php
// 연결을 초기화하십시오
$mysqli = new mysqli("localhost", "user", "password", "database");

// 전처리 진술을 만듭니다
$stmt = $mysqli->stmt_init();

// 준비하다SQL질문
$sql = "INSERT INTO users (name, age, email) VALUES (?, ?, ?)";

if ($stmt->prepare($sql)) {
    $name = "John Doe";
    $age = null;  // NULL 값
    $email = "john.doe@m66.net";

    // ~을 위한 NULL 값使用特殊绑定
    $stmt->bind_param("sis", $name, $age, $email);

    // 执行질문
    $stmt->execute();
}
?>

3.2 널 값의 특수 처리

bind_param 에서 null 값을 올바르게 전달하려면 PHP는 매개 변수를 지원하지만 문자열 및 정수 ( i ) 등과 같은 특정 데이터 유형으로 제한됩니다. NULL 값의 경우 함수로 전달되고 유형을 지정 해야하는지 확인해야합니다.

 <?php
// 예:거래하십시오 NULL 값的代码
$null_value = null;
$stmt->bind_param("s", $null_value);
$stmt->execute();
?>

4. 주목할만한 것들

  • 가변 유형 NULL을 전달할 때 : NULL이 NULL을 통과 할 때 해당 SQL 유형과 일치하는지 확인하십시오. 예를 들어, 필드가 정수 유형 인 경우 bind_param 의 유형은 i 여야합니다.

  • ISSET ()을 사용하여 결정 : ISSET ()을 사용하여 변수가 여부를 결정하여 다른 상황에 따라 결합 값을 설정할 수 있습니다.

 <?php
$age = null;
if (isset($age)) {
    $stmt->bind_param("i", $age);
} else {
    $stmt->bind_param("i", $null_value);
}
?>

5. 요약

mysqli :: stmt_initbind_param을 사용할 때는 null 값을 처리하려면 특별한주의를 기울여야합니다. NULL 값을 올바르게 전달하고 적절한 SQL 유형과 일치하는 것이 중요합니다. 치료하지 않으면 쿼리 실패 또는 바람직하지 않은 동작이 발생할 수 있습니다. 이 기사를 도입함으로써 실제 개발에서 값을 올바르게 처리하는 데 도움이되기를 바랍니다.