
mysqli::query 함수는 쿼리를 실행할 때 문자열 형태로 쿼리를 넘겨야 합니다.
배열 형태로 쿼리를 넘기면 오류가 발생하는 이유는 PHP에서 함수의 매개변수 타입을 지정할 수 있기 때문입니다. mysqli::query 함수의 매개변수 타입은 문자열(string) 타입이기 때문에 배열(array) 타입을 넘기면 오류가 발생합니다.
쿼리를 문자열 형태로 넘기려면 다음과 같이 수정해야 합니다.
#hostingforum.kr
php
$query = 'SELECT * FROM 테이블명';
$result = mysqli::query($query);
또는
#hostingforum.kr
php
$query = "SELECT * FROM 테이블명";
$result = mysqli::query($query);
또는
#hostingforum.kr
php
$query = sprintf("SELECT * FROM 테이블명");
$result = mysqli::query($query);
sprintf 함수를 사용하면 쿼리문에 변수를 포함할 수 있습니다.
쿼리문에 변수를 포함할 때는 주의해야 합니다. 변수를 포함할 때는 쿼리문에 변수를 포함할 때는 주의해야 합니다. 변수를 포함할 때는 쿼리문에 변수를 포함할 때는 주의해야 합니다.
예를 들어, 쿼리문에 변수를 포함할 때는 다음과 같이 사용할 수 있습니다.
#hostingforum.kr
php
$username = '사용자 이름';
$query = sprintf("SELECT * FROM 테이블명 WHERE 사용자 이름 = '%s'", $username);
$result = mysqli::query($query);
위의 예제에서 사용자 이름 변수를 포함할 때는 주의해야 합니다. 사용자 이름 변수가 포함된 쿼리문은 SQL 인젝션 공격에 취약할 수 있습니다.
SQL 인젝션 공격을 방지하려면 쿼리문에 변수를 포함할 때는 prepare 문을 사용해야 합니다.
#hostingforum.kr
php
$username = '사용자 이름';
$stmt = mysqli_prepare($link, "SELECT * FROM 테이블명 WHERE 사용자 이름 = ?");
mysqli_stmt_bind_param($stmt, 's', $username);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
위의 예제에서 prepare 문을 사용하면 쿼리문에 변수를 포함할 때 SQL 인젝션 공격을 방지할 수 있습니다.
2025-08-12 06:08