>백엔드 개발 >PHP 튜토리얼 >PHP MySQL 준비 명령문에 대한 관련 지식

PHP MySQL 준비 명령문에 대한 관련 지식

jacklove
jacklove원래의
2018-05-07 14:08:201644검색

PHP MySQL 준비문은 PHP에서 매우 중요합니다. 이 글에서는 PHP MySQL 준비문에 대해 자세히 알아볼 것입니다.

Prepared 문 및 바인딩된 매개변수

Prepared 문은 실행 효율성이 높은 여러 개의 동일한 SQL 문을 실행하는 데 사용됩니다.

전처리된 문은 다음과 같이 작동합니다.

전처리: SQL 문 템플릿을 생성하여 데이터베이스로 보냅니다. 예약된 값은 "?"라는 매개변수로 표시됩니다. 예:

INSERT INTO MyGuests(이름, 성, 이메일) VALUES(?, ?, ?)

SQL 문 템플릿에 대한 데이터베이스 구문 분석, 컴파일, 쿼리 최적화 및 결과를 출력하지 않고 저장합니다.

실행: 마지막으로 애플리케이션에 바인딩된 값이 매개변수("?" 표시)에 전달되고 데이터베이스가 해당 명령문을 실행합니다. 매개변수 값이 다를 경우 애플리케이션은 해당 명령문을 여러 번 실행할 수 있습니다.

SQL 문을 직접 실행하는 것과 비교하여 준비된 문에는 두 가지 주요 장점이 있습니다.

전처리된 문은 분석 시간을 크게 줄이고 하나의 쿼리만 수행합니다(문이 여러 번 실행되더라도).

바인딩 매개변수는 서버 대역폭을 줄이므로 전체 문 대신 쿼리 매개변수만 보내면 됩니다.

미리 준비된 문장은 SQL 인젝션에 매우 유용합니다. 매개변수 값이 전송된 후 다른 프로토콜을 사용하여 데이터의 적법성을 보장하기 때문입니다.

MySQLi 준비된 문

다음 예에서는 MySQLi의 준비된 문을 사용하고 해당 매개 변수를 바인딩합니다.

예(MySQLi는 준비된 문을 사용합니다)

<?php$servername = "localhost";$username = "username";$password = "password";$dbname = "myDB"; 
// 创建连接$conn = new mysqli($servername, $username, $password, $dbname); 
// 检测连接if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);}
 // 预处理及绑定$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");$stmt->bind_param("sss", $firstname, $lastname, $email); 
// 设置参数并执行$firstname = "John";$lastname = "Doe";$email = "john@example.com";$stmt->execute(); 
$firstname = "Mary";$lastname = "Moe";$email = "mary@example.com";$stmt->execute(); 
$firstname = "Julie";$lastname = "Dooley";$email = "julie@example.com";$stmt->execute(); 
echo "新记录插入成功"; 
$stmt->close();$conn->close();?>

다음 예에서 각 코드 줄을 구문 분석합니다.

"INSERT INTO MyGuests(firstname) , 성, 이메일) VALUES(?, ?, ?)"

SQL 문에서는 물음표(?)를 사용합니다. 여기서 물음표를 정수, String, double float 및 부울.

다음으로, bind_param() 함수를 살펴보겠습니다.

$stmt->bind_param("sss", $firstname, $lastname, $email);

이 함수는 SQL 매개변수를 바인딩하고 데이터베이스에 전달합니다. 매개변수의 값. "sss" 매개변수 열은 나머지 매개변수의 데이터 유형을 처리합니다. s 문자는 데이터베이스에 매개변수가 문자열임을 알려줍니다.

매개변수에는 다음 네 가지 유형이 있습니다.

i - 정수(정수 유형)

d - double(배정밀도 부동 소수점 유형)

s - 문자열(문자열)

b - BLOB(바이너리 대형 객체: 바이너리 Large) 객체)

각 매개변수는 유형을 지정해야 합니다.

데이터베이스에 매개변수의 데이터 유형을 알려줌으로써 SQL 주입 위험을 줄일 수 있습니다.



참고: 다른 데이터(사용자 입력)를 삽입하려면 데이터 유효성 검사가 매우 중요합니다.

PDO의 준비된 문

다음 예에서는 PDO에서 준비된 문과 바인드 매개변수를 사용합니다.

예(PDO는 준비된 문을 사용합니다)

<?php$servername = "localhost";$username = "username";$password = "password";$dbname = "myDBPDO"; 
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);    // 设置 PDO 错误模式为异常
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    // 预处理 SQL 并绑定参数
    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 
    VALUES (:firstname, :lastname, :email)");    $stmt->bindParam(&#39;:firstname&#39;, $firstname);    $stmt->bindParam(&#39;:lastname&#39;, $lastname);    $stmt->bindParam(&#39;:email&#39;, $email); 
    // 插入行
    $firstname = "John";    $lastname = "Doe";    $email = "john@example.com";    $stmt->execute(); 
    // 插入其他行
    $firstname = "Mary";    $lastname = "Moe";    $email = "mary@example.com";    $stmt->execute(); 
    // 插入其他行
    $firstname = "Julie";    $lastname = "Dooley";    $email = "julie@example.com";    $stmt->execute(); 
    echo "新记录插入成功";}catch(PDOException $e){
    echo "Error: " . $e->getMessage();}$conn = null;?>

이 문서에서는 관련 php mysql 준비된 문에 대해 자세히 설명합니다. 지식 학습 자료를 보려면 PHP 중국어 웹사이트에 주의하세요.

관련 권장 사항:

PHP MySQL을 통해 여러 데이터 조각을 삽입하는 방법

PHP MySQL을 통해 데이터를 삽입하는 방법

PHP를 통해 MySQL 테이블을 만드는 방법

위 내용은 PHP MySQL 준비 명령문에 대한 관련 지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.