전처리 명세서 작업에 PHP의 MySQLI 확장을 사용할 때 MySQLI_STMT :: BIND_PARAM은 매개 변수를 전처리 문에 바인딩하는 매우 일반적인 방법입니다. 반면에 mysqli_stmt :: attr_get은 전처리 문의 속성을 얻는 데 사용됩니다. 이 두 방법의 호출 순서가 결과에 영향을 미치는지 여부와 Att_get이 Bind_Param을 안전하게 호출 해야하는지 여부는 많은 개발자가 우려하는 질문입니다.
BIND_PARAM 메소드는 전처리 명령문에서 변수를 매개 변수 마크 (물음표)에 바인딩하는 데 사용됩니다. 이 방법의 핵심 기능은 SQL 주입을 방지하고 실행 효율을 향상시키기 위해 매개 변수화 된 쿼리를 구현하는 것입니다. 기본 사용량은 다음과 같습니다.
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$id = 1;
$stmt->bind_param("i", $id);
$stmt->execute();
여기서 "i"는 바운드의 매개 변수 유형이 정수임을 의미합니다.
Att_get은 mysqli_stmt_attr_update_max_length 등과 같은 전처리 문의 속성을 얻는 데 사용됩니다. 일반적으로 전처리 문의 상태를 확인하기 위해 디버깅 또는 일부 특별한 경우에 사용됩니다.
예를 들어:
$max_length = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "Max length updated: " . $max_length;
일반적으로 attr_get은 바인딩 매개 변수를 수행하는 데 필요한 단계가 아닙니다. BIND_PARAM은 전처리 명령문이 성공적으로 준비되는 한 바인딩 매개 변수 유형과 변수가 정확합니다.
호출 주문은 다음과 같이 권장됩니다.
$ stmt = $ mysqli-> 준비 ($ sql);
$ stmt-> bind_param ($ type, ... $ vars);
$ stmt-> execute ();
attr_get을 호출하는 것은 선택적이며 주로 속성 정보를 얻는 데 사용되며 바인딩 매개 변수간에 직접적인 종속성이 없습니다.
먼저 attr_get을 호출 한 다음 bind_param :
전처리 명세서가 준비된 경우 Bind_param 의 실행에 영향을 미치지 않습니다. attr_get은 속성을 가져 오며 바운드 매개 변수의 상태를 수정하지 않습니다.
먼저 bind_param을 호출 한 다음 attr_get :
이는 attr_get 획득 속성의 값에 영향을 미치지 않으며 호출 순서는 함수에 영향을 미치지 않습니다.
요약하면 Att_get 과 Bind_param 사이에는 엄격한 통화 주문 종속성이 없으며 둘 다 서로 독립적이며 Att_get은 일반적으로 선택적 작업입니다.