티스토리 뷰
PHP에는 mysql과 mysqli가 있습니다.
mysql은 오래전 사용되었고 현재에는 mysql을 개선한 mysqli가 있으므로 mysqli를 사용하시는게 좋습니다.
- mysqli_prepare() - 실행을 위해 SQL 문을 준비합니다.
- mysqli_stmt_result_metadata() - 준비된 명령문에서 결과 세트 메타데이터를 반환합니다.
- mysqli_stmt_fetch() - 준비된 명령문에서 바인딩된 변수로 결과를 가져옵니다.
- mysqli_fetch_array() - 결과 세트의 다음 행을 연관, 숫자 배열 또는 둘 다로 가져옵니다.
- mysqli_stmt_store_result() - 결과 세트를 내부 버퍼에 저장
MySQL 서버에 대한 새 연결 열기
- mysqli::__construct
- mysqli::connect
- mysqli_connect
객체지향 style
public mysqli::__construct(
string $hostname = ini_get("mysqli.default_host"),
string $username = ini_get("mysqli.default_user"),
string $password = ini_get("mysqli.default_pw"),
string $database = "",
int $port = ini_get("mysqli.default_port"),
string $socket = ini_get("mysqli.default_socket")
)
public mysqli::connect(
string $hostname = ini_get("mysqli.default_host"),
string $username = ini_get("mysqli.default_user"),
string $password = ini_get("mysqli.default_pw"),
string $database = "",
int $port = ini_get("mysqli.default_port"),
string $socket = ini_get("mysqli.default_socket")
): void
mysqli_connect(
string $hostname = ini_get("mysqli.default_host"),
string $username = ini_get("mysqli.default_user"),
string $password = ini_get("mysqli.default_pw"),
string $database = "",
int $port = ini_get("mysqli.default_port"),
string $socket = ini_get("mysqli.default_socket")
): mysqli|false
데이터베이스에 대한 쿼리를 수행합니다.
public mysqli::query(string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool
mysqli_query(mysqli $mysql, string $query, int $result_mode = MYSQLI_STORE_RESULT): mysqli_result|bool
※ 쿼리에 변수 입력이 포함된 경우 매개변수화된 준비된 명령문 을 대신 사용해야 합니다. 또는 데이터 형식이 적절해야 하며 모든 문자열은 mysqli_real_escape_string() 함수를 사용하여 이스케이프되어야 합니다. 데이터베이스 관련 함수를 사용할 때는 언제나 SQL injection에 주의하여야 합니다.
객체 지향 스타일
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* Create table doesn't return a resultset */
$mysqli->query("CREATE TEMPORARY TABLE myCity LIKE City");
printf("Table myCity successfully created.\n");
/* Select queries return a resultset */
$result = $mysqli->query("SELECT Name FROM City LIMIT 10");
printf("Select returned %d rows.\n", $result->num_rows);
$result = $mysqli->query("SELECT * FROM City", MYSQLI_USE_RESULT);
$mysqli->query("SET @a:='this will not work'");
절차적 스타일
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
/* Create table doesn't return a resultset */
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
printf("Table myCity successfully created.\n");
/* Select queries return a resultset */
$result = mysqli_query($link, "SELECT Name FROM City LIMIT 10");
printf("Select returned %d rows.\n", mysqli_num_rows($result));
/* If we have to retrieve large amount of data we use MYSQLI_USE_RESULT */
$result = mysqli_query($link, "SELECT * FROM City", MYSQLI_USE_RESULT);
mysqli_query($link, "SET @a:='this will not work'");
실행을 위한 SQL 문 준비
- mysqli::preparde
- mysqli_prepare
public mysqli::prepare(string $query): mysqli_stmt|false
mysqli_prepare(mysqli $mysql, string $query): mysqli_stmt|false
SQL 쿼리를 준비하고 명령문에 대한 추가 작업에 사용할 명령문 핸들을 반환합니다. 쿼리는 단일 SQL 문으로 구성되어야 합니다.절차지향적 방식인 mysql_prepare()의 경우 mysqli_connect() 또는 mysqli_init( )에 의해 반환된 mysqli 객체를 $mysql로 넘겨 주여야 합니다.
명령문 템플릿에는 자리 표시자라고도 하는 0개 이상의 물음표( ?) 매개변수 마커가 포함될 수 있습니다. 매개변수 마커는 명령문을 실행하기 전에 mysqli_stmt_bind_param() 을 사용하여 애플리케이션 변수에 바인딩되어야 합니다. 일반적으로 매개변수는 DML(데이터 조작 언어) 문에서만 유효하고 DDL(데이터 정의어) 문에서는 유효하지 않습니다.
마커는 SQL 문의 특정 위치에서만 유효합니다. 예를 들어, 명령문의 VALUES() 목록 INSERT(행에 대한 열 값 지정)에서 또는 WHERE비교 값을 지정하기 위해 절의 열과의 비교에서 허용됩니다.
그러나 식별자(예: 테이블 또는 열 이름)에 대해 또는 =등호와 같은 이항 연산자의 두 피연산자를 모두 지정하는 데에는 허용되지 않습니다. 후자의 제한은 매개변수 유형을 결정하는 것이 불가능하기 때문에 필요합니다. 일반적으로 매개변수는 DML(데이터 조작 언어) 문에서만 유효하고 DDL(데이터 정의어) 문에서는 유효하지 않습니다.
예제 #1 mysqli::prepare() 예제
객체 지향 스타일
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* create a prepared statement */
$stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
/* bind parameters for markers */
$stmt->bind_param("s", $city);
/* execute query */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($district);
/* fetch value */
$stmt->fetch();
printf("%s is in district %s\n", $city, $district);
절차적 스타일
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$city = "Amersfoort";
/* create a prepared statement */
$stmt = mysqli_prepare($link, "SELECT District FROM City WHERE Name=?");
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);
/* execute query */
mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $district);
/* fetch value */
mysqli_stmt_fetch($stmt);
printf("%s is in district %s\n", $city, $district);
public mysqli_stmt::get_result(): mysqli_result|false
mysqli_stmt_get_result(mysqli_stmt $statement): mysqli_result|false
준비된 명령문에서 결과 집합을 mysqli_result 객체 로 가져옵니다. 데이터는 MySQL 서버에서 PHP로 가져옵니다. 이 메서드는 결과 집합을 생성하는 쿼리에 대해서만 호출해야 합니다.
이 함수는 mysqli_stmt_store_result()와 함께 사용할 수 없습니다 . 이 두 함수는 모두 MySQL 서버에서 전체 결과 세트를 검색합니다.
트렌젝션
mysqli는 기본적으로 오토 커밋을 하게 된다. 커밋을 해야 실제 Database에 적용이 된다. 커밋전에 롤백하게 되면 그동안 작업한 내용들은 실제 Database에 적용되지 않는다.
mysqli::autocommit , mysqli_autocommit — 데이터베이스 수정 자동 커밋을 켜거나 끕니다.
참고로 트렌젝션 중 일부 에러가 발생한다면 전체 트렌젝션이 적용되지 않습니다. (틀렸다면 댓글 남겨 주세요)
/* 오류가 발생하면 예외를 던지도록 mysqli에 지시 */
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "my_user", "my_password", "world");
/* 테이블 엔진이 트랜잭션을 지원해야 합니다 */
mysqli_query($mysqli, "CREATE TABLE IF NOT EXISTS language (
Code text NOT NULL,
Speakers int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");
/* 자동 커밋 끄기 */
mysqli_autocommit($mysqli, false);
$result = mysqli_query($mysqli, "SELECT @@autocommit");
$row = mysqli_fetch_row($result);
printf("Autocommit is %s\n", $row[0]);
try {
/* Prepare insert */
$stmt = mysqli_prepare($mysqli, 'INSERT INTO language(Code, Speakers) VALUES (?,?)');
mysqli_stmt_bind_param($stmt, 'ss', $language_code, $native_speakers);
/* Insert some values */
$language_code = 'DE';
$native_speakers = 50_123_456;
mysqli_stmt_execute($stmt);
$language_code = 'FR';
$native_speakers = 40_546_321;
mysqli_stmt_execute($stmt);
/* 데이터베이스의 데이터를 커밋합니다. 이것은 autocommit=true로 설정되지 않습니다 */
mysqli_commit($mysqli);
print "Committed 2 rows in the database\n";
$result = mysqli_query($mysqli, "SELECT @@autocommit");
$row = mysqli_fetch_row($result);
printf("Autocommit is %s\n", $row[0]);
/* Try to insert more values */
$language_code = 'PL';
$native_speakers = 30_555_444;
mysqli_stmt_execute($stmt);
$language_code = 'DK';
$native_speakers = 5_222_444;
mysqli_stmt_execute($stmt);
/* autocommit=true로 설정하면 커밋이 트리거됩니다. */
mysqli_autocommit($mysqli, true);
print "Committed 2 row in the database\n";
} catch (mysqli_sql_exception $exception) {
mysqli_rollback($mysqli);
throw $exception;
}
MySQL 개선된 확장
- 빠른 시작 가이드
- mysqli 확장 및 영구 연결
- 미리 정의된 상수
- 노트
- MySQLi 확장 기능 요약
- mysqli — mysqli 클래스
- mysqli::$affected_rows — 이전 MySQL 작업에서 영향을 받은 행의 수를 가져옵니다.
- mysqli::autocommit — 데이터베이스 수정 자동 커밋을 켜거나 끕니다.
- mysqli::begin_transaction — 트랜잭션 시작
- mysqli::change_user — 지정된 데이터베이스 연결의 사용자를 변경합니다.
- mysqli::character_set_name — 데이터베이스 연결의 현재 문자 집합을 반환합니다.
- mysqli::close — 이전에 열린 데이터베이스 연결을 닫습니다.
- mysqli::commit — 현재 트랜잭션을 커밋합니다.
- mysqli::$connect_errno — 마지막 연결 호출에서 오류 코드를 반환합니다.
- mysqli::$connect_error — 마지막 연결 오류에 대한 설명을 반환합니다.
- mysqli::__construct — MySQL 서버에 대한 새 연결 열기
- mysqli::debug — 디버깅 작업을 수행합니다.
- mysqli::dump_debug_info — 디버깅 정보를 로그에 덤프
- mysqli::$errno — 가장 최근의 함수 호출에 대한 오류 코드를 반환합니다.
- mysqli::$error_list — 마지막으로 실행된 명령의 오류 목록을 반환합니다.
- mysqli::$error — 마지막 오류에 대한 문자열 설명을 반환합니다.
- mysqli::$field_count — 가장 최근 쿼리에 대한 열 수를 반환합니다.
- mysqli::get_charset — 문자 집합 객체를 반환합니다.
- mysqli::$client_info — MySQL 클라이언트 정보 얻기
- mysqli::$client_version — MySQL 클라이언트 버전을 정수로 반환
- mysqli::get_connection_stats — 클라이언트 연결에 대한 통계를 반환합니다.
- mysqli::$host_info — 사용된 연결 유형을 나타내는 문자열을 반환합니다.
- mysqli::$protocol_version — 사용된 MySQL 프로토콜의 버전을 반환합니다.
- mysqli::$server_info — MySQL 서버의 버전을 반환합니다.
- mysqli::$server_version — MySQL 서버의 버전을 정수로 반환
- mysqli::get_warnings — 경고 표시 결과 가져 오기
- mysqli::$info — 가장 최근에 실행된 쿼리에 대한 정보를 검색합니다.
- mysqli::init — MySQLi를 초기화하고 mysqli_real_connect()와 함께 사용할 객체를 반환합니다.
- mysqli::$insert_id — 마지막 쿼리에 의해 AUTO_INCREMENT 열에 대해 생성된 값을 반환합니다.
- mysqli::kill — 서버에 MySQL 스레드를 종료하도록 요청합니다.
- mysqli::more_results — 다중 쿼리의 쿼리 결과가 더 있는지 확인
- mysqli::multi_query — 데이터베이스에 대해 하나 이상의 쿼리를 수행합니다.
- mysqli::next_result — multi_query의 다음 결과 준비
- mysqli::options — 옵션 설정
- mysqli::ping — 서버 연결을 핑하거나 연결이 끊어진 경우 다시 연결을 시도합니다.
- mysqli::poll — 폴링 연결
- mysqli::prepare — 실행을 위해 SQL 문을 준비합니다.
- mysqli::query — 데이터베이스에 대한 쿼리를 수행합니다.
- mysqli::real_connect — mysql 서버에 대한 연결을 엽니다.
- mysqli::real_escape_string — 연결의 현재 문자 집합을 고려하여 SQL 문에서 사용하기 위해 문자열의 특수 문자를 이스케이프합니다.
- mysqli::real_query — SQL 쿼리 실행
- mysqli::reap_async_query — 비동기 쿼리에서 결과 가져오기
- mysqli::refresh — 새로 고침
- mysqli::release_savepoint — 현재 트랜잭션의 저장점 집합에서 명명된 저장점을 제거합니다.
- mysqli::rollback — 현재 트랜잭션 롤백
- mysqli::savepoint — 명명된 트랜잭션 저장점 설정
- mysqli::select_db — 데이터베이스 쿼리를 위한 기본 데이터베이스 선택
- mysqli::set_charset — 클라이언트 문자 집합을 설정합니다.
- mysqli::$sqlstate — 이전 MySQL 작업에서 SQLSTATE 오류를 반환합니다.
- mysqli::ssl_set — SSL을 사용하여 보안 연결을 설정하는 데 사용
- mysqli::stat — 현재 시스템 상태를 가져옵니다.
- mysqli::stmt_init — 명령문을 초기화하고 mysqli_stmt_prepare와 함께 사용할 객체를 반환합니다.
- mysqli::store_result — 마지막 쿼리의 결과 세트를 전송합니다.
- mysqli::$thread_id — 현재 연결에 대한 스레드 ID를 반환합니다.
- mysqli::thread_safe — 스레드 안전성이 부여되었는지 여부를 반환합니다.
- mysqli::use_result — 결과 세트 검색 시작
- mysqli::$warning_count — 주어진 링크에 대한 마지막 쿼리의 경고 수를 반환합니다.
- mysqli_stmt — mysqli_stmt 클래스
- mysqli_stmt::$affected_rows — 마지막으로 실행된 명령문에 의해 변경, 삭제, 삽입 또는 일치된 총 행 수를 반환합니다.
- mysqli_stmt::attr_get — 명령문 속성의 현재 값을 가져오는 데 사용
- mysqli_stmt::attr_set — 준비된 문의 동작을 수정하는 데 사용
- mysqli_stmt::bind_param — 준비된 명령문에 변수를 매개변수로 바인딩
- mysqli_stmt::bind_result — 결과 저장을 위해 준비된 명령문에 변수를 바인드합니다.
- mysqli_stmt::close — 준비된 명령문을 닫습니다.
- mysqli_stmt::__construct — 새로운 mysqli_stmt 객체를 생성합니다.
- mysqli_stmt::data_seek — 명령문 결과 세트에서 임의의 행을 찾습니다.
- mysqli_stmt::$errno — 가장 최근의 명령문 호출에 대한 오류 코드를 반환합니다.
- mysqli_stmt::$error_list — 마지막으로 실행된 명령문의 오류 목록을 반환합니다.
- mysqli_stmt::$error — 마지막 명령문 오류에 대한 문자열 설명을 반환합니다.
- mysqli_stmt::execute — 준비된 명령문을 실행합니다.
- mysqli_stmt::fetch — 준비된 명령문에서 바인딩된 변수로 결과를 가져 옵니다.
- mysqli_stmt::$field_count — 주어진 명령문의 열 수를 반환합니다.
- mysqli_stmt::free_result — 주어진 명령문 핸들에 대해 저장된 결과 메모리를 해제합니다.
- mysqli_stmt::get_result — 준비된 명령문에서 결과 세트를 mysqli_result 객체로 가져 옵니다.
- mysqli_stmt::get_warnings — 경고 표시 결과 가져 오기
- mysqli_stmt::$insert_id — 이전 INSERT 작업에서 생성된 ID를 가져옵니다.
- mysqli_stmt::more_results — 다중 쿼리에서 더 많은 쿼리 결과가 있는지 확인
- mysqli_stmt::next_result — 다중 쿼리에서 다음 결과를 읽습니다.
- mysqli_stmt::$num_rows — 서버에서 가져온 행 수를 반환합니다.
- mysqli_stmt::$param_count — 주어진 명령문에 대한 매개변수의 수를 반환합니다.
- mysqli_stmt::prepare — 실행을 위한 SQL 문 준비
- mysqli_stmt::reset — 준비된 명령문을 재설정합니다.
- mysqli_stmt::result_metadata — 준비된 명령문에서 결과 세트 메타데이터를 반환합니다.
- mysqli_stmt::send_long_data — 블록 단위로 데이터 보내기
- mysqli_stmt::$sqlstate — 이전 명령문 작업에서 SQLSTATE 오류를 반환합니다.
- mysqli_stmt::store_result — 결과 세트를 내부 버퍼에 저장
- mysqli_result — mysqli_result 클래스
- mysqli_result::__construct — mysqli_result 객체를 생성합니다.
- mysqli_result::$current_field — 결과 포인터의 현재 필드 오프셋 가져오기
- mysqli_result::data_seek — 결과 포인터를 결과의 임의의 행으로 조정합니다.
- mysqli_result::fetch_all — 모든 결과 행을 연관 배열, 숫자 배열 또는 둘 다로 가져옵니다.
- mysqli_result::fetch_array — 결과 세트의 다음 행을 연관, 숫자 배열 또는 둘 다로 가져옵니다.
- mysqli_result::fetch_assoc — 결과 세트의 다음 행을 연관 배열로 가져옵니다.
- mysqli_result::fetch_column — 결과 세트의 다음 행에서 단일 열을 가져옵니다.
- mysqli_result::fetch_field_direct — 단일 필드에 대한 메타 데이터 가져오기
- mysqli_result::fetch_field — 결과 세트의 다음 필드를 반환합니다.
- mysqli_result::fetch_fields — 결과 세트의 필드를 나타내는 객체 배열을 반환합니다.
- mysqli_result::fetch_object — 결과 세트의 다음 행을 객체로 가져옵니다.
- mysqli_result::fetch_row — 결과 집합의 다음 행을 열거형 배열로 가져옵니다.
- mysqli_result::$field_count — 결과 세트의 필드 수를 가져옵니다.
- mysqli_result::field_seek — 결과 포인터를 지정된 필드 오프셋으로 설정
- mysqli_result::free — 결과와 관련된 메모리를 해제합니다.
- mysqli_result::getIterator — 외부 반복자 검색
- mysqli_result::$lengths — 결과 세트에서 현재 행의 열 길이를 반환합니다.
- mysqli_result::$num_rows — 결과 세트의 행 수를 가져옵니다.
- mysqli_driver — mysqli_driver 클래스
- mysqli_driver::embedded_server_end — 임베디드 서버 중지
- mysqli_driver::embedded_server_start — 임베디드 서버 초기화 및 시작
- mysqli_driver::$report_mode — mysqli 오류 보고 모드를 설정합니다.
- mysqli_warning — mysqli_warning 클래스
- mysqli_warning::__construct — 직접 인스턴스화를 허용하지 않는 전용 생성자
- mysqli_warning::next — 다음 경고 가져오기
- mysqli_sql_exception — mysqli_sql_exception 클래스
- mysqli_sql_exception::getSqlState — SQLSTATE 오류 코드를 반환합니다.
- 별칭 및 더 이상 사용되지 않는 Mysqli 함수
- mysqli_connect — mysqli::__construct의 별칭
- mysqli::escape_string — mysqli_real_escape_string의 별칭
- mysqli_execute — mysqli_stmt_execute의 별칭
- mysqli_get_client_stats — 클라이언트 프로세스별 통계를 반환합니다.
- mysqli_get_links_stats — 열린 링크와 캐시된 링크에 대한 정보 반환
- mysqli_report — mysqli_driver->report_mode의 별칭
- mysqli::set_opt — mysqli_options의 별칭
'오늘도 개발자 > PHP' 카테고리의 다른 글
[PHP] 파일(file) (0) | 2022.01.31 |
---|---|
[PHP] 에러 리포팅(Error Reporting) (0) | 2022.01.31 |
[PHP]System program execution (0) | 2022.01.31 |
[PHP]Output Buffering Control (0) | 2022.01.30 |
[PHP] 스트림(Streams) (0) | 2022.01.30 |
- Total
- Today
- Yesterday
- php
- 철거
- URL디코딩
- CSPRNG
- 도스 코파스
- url복사
- 이전설치
- 고흐1인칭시점
- URL인코딩
- wp-members
- 워드프레스
- 코스모스팜
- 스프레드연산자
- WordPress
- FTP권한문제
- MySQL
- ontent
- 빛의성당
- 라이트세일
- wordpress #워드프레스 #url
- Sanitize
- Theme Customization
- 11번가 아마존 #우주패스 #우주쓰레기
- 사용자정의하기
- 이사
- 빈화면
- Lighitsail
- 썸머노트
- 지대공
- 한빛미디어
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |