PHP 개발 중에 MySQLI 확장 전처리 명세서를 사용하면 SQL 주입을 효과적으로 방지하고 데이터베이스 작업의 보안 및 효율성을 향상시킬 수 있습니다. mysqli_stmt :: attr_get은 전처리 명령문 속성을 얻는 데 사용되는 MySQLI의 함수이며 종종 실행 세부 사항을 디버그하고 제어하는 데 사용됩니다.
그러나 일부 오래된 PHP 환경에서 MySQLI_STMT :: ATTR_GET 함수는 불안정 또는 지원에 문제가있을 수 있으므로 예외 또는 제대로 작동하지 않을 수 있습니다. 이 기사는 MySQLI_STMT :: ATTR_GET가 레거시 PHP 환경에서 안정적으로 작동하도록하는 실용적인 솔루션을 공유합니다.
mysqli_stmt :: att_get 함수는 php 5.3 이상에서만 지원됩니다. 환경이 더 일찍 있거나 MySQLI 확장이 완전히 활성화되지 않은 경우이 방법을 호출 할 때 오류 또는 행동 예외 가보고됩니다.
따라서 첫 번째 단계는 PHP 버전 및 확장 지원을 확인하는 것입니다.
if (version_compare(PHP_VERSION, '5.3.0', '<')) {
die('현재의 PHP 버전은 지원되지 않습니다 mysqli_stmt::attr_get 기능。');
}
if (!extension_loaded('mysqli')) {
die('로드되지 않았습니다 MySQLi 펼친,사용할 수 없습니다 mysqli_stmt::attr_get。');
}
attr_get을 호출하기 전에 함수 또는 메소드 존재 감지를 사용하여 기능의 존재하지 않아 프로그램 충돌을 피하십시오.
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (method_exists($stmt, 'attr_get')) {
$attr = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "현재의속성 값: " . $attr;
} else {
echo "현재의环境지원되지 않습니다 attr_get 방법,이 작업을 건너 뛰십시오。";
}
이런 식으로, 기존 버전의 PHP에서도 프로그램은 안전하게 실행될 수 있으며 방법을 찾을 수 없기 때문에 오류를보고하지 않습니다.
일부 속성을 가져와야하지만 Att_get을 사용할 수 없으면 필요에 따라 대체 논리를 설계 할 수 있습니다. 예를 들어, 해당 SQL 문 또는 구성 매개 변수를 실행하여 특정 속성의 값을 얻을 수 있습니다.
// 업데이트 된 최대 길이 속성을 가져와야한다고 가정합니다.,대신 기본값을 사용하거나 쿼리 구성을 사용할 수 있습니다
$update_max_length = defined('MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH') ? MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH : null;
if ($update_max_length === null) {
// 오래된 버전 PHP 얻을 수 없습니다,합리적인 기본값을 수동으로 설정하십시오
$update_max_length_value = 1024;
} else {
$update_max_length_value = $stmt->attr_get($update_max_length);
}
echo "최대 길이 속성 값을 업데이트하십시오: " . $update_max_length_value;
위의 방법은 코드의 안정성을 어느 정도까지 보장 할 수 있지만 장기적으로 MySQLI_STMT :: ATT_GET을 지원하는 PHP 버전으로 업그레이드하는 것이 더 나은 선택입니다. 또한 호환성을 더 잘 처리하는 PDO 또는 타사 데이터베이스 추상화 레이어 라이브러리를 사용하는 것을 고려하십시오.
$mysqli = new mysqli('m66.net', 'username', 'password', 'database');
if ($mysqli->connect_errno) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
if (!$stmt) {
die("전처리가 실패했습니다: " . $mysqli->error);
}
$id = 1;
$stmt->bind_param('i', $id);
if (method_exists($stmt, 'attr_get')) {
$attr_value = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
echo "속성 값: " . $attr_value;
} else {
echo "attr_get 지원되지 않습니다,뛰어 올라。";
}
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$stmt->close();
$mysqli->close();