MySQLi 및 PDO를 사용하여 MySQL에 여러 데이터 조각 삽입
mysqli_multi_query() 함수는 여러 SQL 문을 실행하는 데 사용할 수 있습니다.
다음 예에서는 "MyGuests" 테이블에 세 개의 새 레코드를 추가합니다.
예(MySQLi - 객체 지향)
<?php $servername = " localhost " ; $username = " 사용자 이름 " ; $ password = " 비밀번호 " ; $dbname = " myDB " ; $conn = 새로운 mysqli ( $servername , $username , $password , $dbname ) // 링크를 확인하세요 . 만약에 ( $conn -> 연결_오류 ) { die ( " 연결 실패: " . $conn - > connect_error ) ; $sql = " MyGuests에 삽입(이름, 성, 이메일)VALUES ('John', 'Doe', '[email protected]'); " $ sql .= " MyGuests에 삽입(이름, 성, 이메일) VALUES ('Mary', 'Moe', '[email protected]') " ; $sql .= " INSERT INTO MyGuests (이름, 성, 이메일)VALUES ('Julie', 'Dooley', '[email protected]') " ; if ( $conn -> multi_query ( $sql ) === TRUE ) { 에코 " 새 레코드가 성공적으로 삽입되었습니다 . " } 또 다른 { 에코 " 오류 : " . " <br> " . $ conn - > 오류 } $conn -> 닫기 ( ) ? > | 각 SQL 문은 세미콜론으로 구분해야 합니다. |
---|
예(MySQLi - 프로시저 지향)
<?php $servername = " localhost " ; $username = " 사용자 이름 " ; $ password = " 비밀번호 " ; $dbname = " myDB " ; $conn = mysqli_connect ( $servername , $username , $password , $dbname ) // 링크를 확인하세요 . 만약에 ( ! $콘 ) { die ( " 연결 실패 : " . mysqli_connect_error ( ) ) ; $sql = " MyGuests에 삽입(이름, 성, 이메일)VALUES ('John', 'Doe', '[email protected]'); " $ sql .= " MyGuests에 삽입(이름, 성, 이메일) VALUES ('Mary', 'Moe', '[email protected]') " ; $sql .= " INSERT INTO MyGuests (이름, 성, 이메일)VALUES ('Julie', 'Dooley', '[email protected]') " ; if ( mysqli_multi_query ( $conn , $sql ) ) { 에코 " 새 레코드가 성공적으로 삽입되었습니다 . " } 또 다른 { 에코 " 오류 : " . " <br> " . mysqli_close ( $conn ) ? > 예시(PDO)
<?php $ servername = " localhost " ; $ username = " 사용자 이름 " ; $ password = " myDBPDO " ; { $conn = 새로운 PDO ( " mysql:host= $servername ;dbname= $dbname " , $username , $password ) ; // PDO 오류 모드를 예외로 설정합니다. $conn -> setAttribute ( PDO :: ATTR_ERRMODE , PDO :: ERRMODE_EXCEPTION ) ; // 트랜잭션 시작 $ conn -> startTransaction ( ) // SQL 문 $conn -> exec ( " MyGuests에 삽입(이름, 성, 이메일) VALUES ('John', 'Doe', '[email protected]') " ) $conn -> exec ( " MyGuests에 삽입(이름 ) , 성, 이메일) VALUES ('Mary', 'Moe', '[email protected]') " ) ; $conn -> exec ( " INSERT INTO MyGuests (이름, 성, 이메일) VALUES ('Julie',
' Dooley', '[email protected]') " ) // 거래 제출 $conn -> 커밋 ( ) 에코 ; " 새 레코드가 성공적으로 삽입되었습니다 . " } 잡기 ( PDO예외 $e ) { // 실행에 실패하면 롤백 $conn -> 롤백 ( ) 에코 ; $ sql . " <br> " . $e -> getMessage ( ) ; $콘 = 널 ? > 준비된 진술을 사용하십시오
mysqli 확장은 명령문을 삽입하는 두 번째 방법을 제공합니다.
명령문을 준비하고 매개변수를 바인딩할 수 있습니다.
mysql 확장은 데이터 없이 mysql 데이터베이스에 명령문이나 쿼리를 보낼 수 있습니다. 변수를 네마틱하게 연관시키거나 "바인딩"할 수 있습니다.
예(MySQLi는 준비된 문을 사용합니다)
<?php $servername = " localhost " ; $username = " 사용자 이름 " ; $password = " 비밀번호 " ; $ dbname = " myDB " ; $conn = 새로운 mysqli ( $servername , $username , $password , $dbname ) ; // 연결 감지 만약에 ( $conn -> 연결_오류 ) { die ( " 연결 실패: " . $conn - > connect_error ) ; 또 다른 { $sql = " INSERT INTO MyGuests(이름, 성, 이메일) VALUES(?, ?, ?) " // mysqli_stmt_prepare()에 대한 명령문 객체 초기화 $stmt = mysqli_stmt_init ( $conn ) ; // 전처리문 만약에 ( mysqli_stmt_prepare ( $stmt , $sql ) ) { // 매개변수 바인딩 mysqli_stmt_bind_param ( $stmt , ' sss ' , $firstname , $ lastname , $email ) // 매개변수 설정 및 실행 $ firstname = ' John ' ; $ email = ' [email protected] ' ( $ stmt ) $ lastname = ' Moe ' ; @ example.com ' ; mysqli_stmt_execute ( $ stmt ) $ firstname = ' 줄리 ' ; ; $ email = ' [email protected] ' ;} ?> 위의 예에서 문제를 해결하기 위해 모듈화가 사용되는 것을 볼 수 있습니다. 코드 블록을 생성하면 읽기 및 관리가 더 쉬워집니다.
매개변수 바인딩에 주의하세요. mysqli_stmt_bind_param()의 코드를 살펴보겠습니다.
mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);
이 함수는 매개변수 쿼리를 바인딩하고 매개변수를 데이터베이스에 전달합니다. 두 번째 매개변수는 "sss"입니다. 다음 목록은 매개변수 유형을 보여줍니다. s 문자는 mysql에게 매개변수가 문자열임을 알려줍니다.
다음 네 가지 매개변수일 수 있습니다.
나는 - 정수
d - 배정밀도 부동 소수점 수
s - 문자열
b - 부울 값
각 매개변수는 데이터 보안을 보장하기 위해 유형을 지정해야 합니다. 유형 판단을 통해 SQL 주입 취약점의 위험을 줄일 수 있습니다.